PostgreSQL日期比较:错误:运算符不存在:日期>整数

时间:2018-09-13 05:30:45

标签: postgresql

有人可以帮我格式化下面的postgreql请求吗?

SELECT count(o.product_id), p.title FROM orders o, products p WHERE 
p.product_id = o.product_id AND o.order_date > current_date - 7 
GROUP BY p.title;

SELECT sum(p.price) AS total, o.order_date from products p, orders o 
WHERE p.product_id = o.product_id AND o.order_date > current_date - 7 
GROUP BY order_date;

我已经用表对Postico和PGweb中的请求进行了测试,并且两个命令都提供了所需的输出,但是当我将它们放入代码中时,出现以下错误。

error: operator does not exist: date > integer

这是表模式的副本

orders(id PRIMARY KEY, order_number INTEGER, product_id INTEGER, user_id INTEGER,
tracking_id VARCHAR(50), order_date DATE)

products(product_id PRIMARY KEY, title VARCHAR(200), description VARCHAR(2500),
price NUMERIC(7,2), img TEXT, brand VARCHAR(50), horsepower INTEGER, 
deck_size INTEGER, product_type VARCHAR(5))

订单表中的product_id引用了产品中的product_id。

以下是用于可视化的表格的屏幕截图:

table definitions

1 个答案:

答案 0 :(得分:1)

我很惊讶您的查询在任何地方运行。如果要从时间戳中减去7天,则应使用:

current_date - INTERVAL '7 DAY'

因此,请使用以下查询:

SELECT
    p.title,
    COUNT(o.product_id)
FROM orders o
INNER JOIN products p
    ON p.product_id = o.product_id
WHERE 
    o.order_date > current_date - INTERVAL '7 DAY'
GROUP BY
    p.title;

注意:我用现代的显式内部联接替换了您的隐式,旧式联接。这是当前编写联接的首选方式。