假设我有一个创建为“订单”的表:
CREATE TABLE orders (id SERIAL,
customerID INTEGER,
timestamp BIGINT,
PRIMARY KEY(id));
时间戳是 UNIX 时间戳。现在我想为每个客户选择最新订单的 ID。作为一个 View 会很好。
但是下面的语句
CREATE VIEW lastOrders AS SELECT id,
customerID,
MAX(timestamp)
FROM orders
GROUP BY customerID;
导致 postgre 错误:
ERROR: column "orders.id" must appear in the GROUP BY clause or be used in an aggregate function
我做错了什么?
最佳答案
对于这类事情,您可以使用 2 种方法。 Jens 已经展示了一个。
其他,就是使用“DISTINCT ON”子句:
CREATE VIEW lastOrders AS
SELECT
DISTINCT ON (customerID)
id,
customerID,
timestamp
FROM orders
ORDER BY customerID, timestamp desc;
关于sql - postgresql中的分组问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/675342/