【问题标题】:PostgreSQL SQL Error [42703]: ERROR: column 'minute' does not existPostgreSQL SQL 错误 [42703]: 错误: 列 'minute' 不存在
【发布时间】:2019-07-28 14:57:13
【问题描述】:

我有以下查询,我收到以下错误:

SQL 错误 [42703]:错误:“分钟”列不存在

但是我没有引用任何名为 minute 的字段。

SELECT customer_id,
MAX(created_at) last_order_date,
MAX(created_at) + ((SELECT EXTRACT(MINUTE FROM MAX(created_at)-MIN(created_at)) 
FROM (SELECT customer_id, created_at
FROM (SELECT customer_id, created_at, rank() over (partition by customer_id order by created_at desc) lasttwo
FROM orders) sub
WHERE sub.lasttwo <= 2
AND SUM(DATEDIFF(MINUTE,MIN(created_at),MAX(created_at))) > 2) s2) ::text||' minute')::INTERVAL AS nextdate,
(SELECT AVG(total_price - total_tax) 
FROM (SELECT customer_id, created_at, total_price, total_tax
FROM (SELECT customer_id, created_at, total_price, total_tax, rank() over (partition by customer_id order by created_at desc) lasttwo
FROM orders) sub
WHERE sub.lasttwo <= 2
AND SUM(DATEDIFF(MINUTE,MIN(created_at),MAX(created_at))) > 2) s2) nextval 
FROM orders 
GROUP BY customer_id

【问题讨论】:

  • 这不是 Postgres 语法:DATEDIFF(MINUTE,MIN(created_at),MAX(created_at))。为什么在 Postgres 查询中使用 SQL Server 语法?
  • 首先弄清楚你使用的是哪个dbms。然后找出您正在使用的 dbms 可以使用哪些日期函数。在另一个 dbms 上使用其他 dbms 功能,然后问为什么它不起作用可能不是一个好问题。

标签: sql postgresql


【解决方案1】:

需要使用EXTRACT 而不是DATEDIFF

SELECT customer_id,
MAX(created_at) last_order_date,
MAX(created_at) + ((SELECT EXTRACT(MINUTE FROM MAX(created_at)-MIN(created_at)) 
FROM (SELECT customer_id, created_at
FROM (SELECT customer_id, created_at, rank() over (partition by customer_id order by created_at desc) lasttwo
FROM orders) sub
WHERE sub.lasttwo <= 2
AND SUM(EXTRACT(MINUTE FROM MAX(created_at)-MIN(created_at))) > 2) s2) ::text||' minute')::INTERVAL AS nextdate,
(SELECT AVG(total_price - total_tax) 
FROM (SELECT customer_id, created_at, total_price, total_tax
FROM (SELECT customer_id, created_at, total_price, total_tax, rank() over (partition by customer_id order by created_at desc) lasttwo
FROM orders) sub
WHERE sub.lasttwo <= 2
AND SUM(EXTRACT(MINUTE FROM MAX(created_at)-MIN(created_at))) > 2) s2) nextval  
FROM orders 
GROUP BY customer_id

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-04
    • 2016-11-20
    相关资源
    最近更新 更多