postgresql中的逐个问题

use*_*579 4 sql postgresql group-by

假设我创建了一个表'orders':

CREATE TABLE orders (id SERIAL, 
                     customerID INTEGER,
                     timestamp BIGINT, 
                     PRIMARY KEY(id));
Run Code Online (Sandbox Code Playgroud)

时间戳是UNIX时间戳.现在我想为每个客户选择最新订单的ID.作为一个观点会很好.

但是以下声明

CREATE VIEW lastOrders AS SELECT  id,
                                  customerID, 
                                  MAX(timestamp) 
                                  FROM orders 
                                  GROUP BY customerID;
Run Code Online (Sandbox Code Playgroud)

导致postgre错误:

错误:列"orders.id"必须出现在GROUP BY子句中或用于聚合函数

我究竟做错了什么?

小智 12

对于这些类型的东西,你可以使用2种方法.Jens已经展示了一个.

其他,是使用"DISTINCT ON"条款:

CREATE VIEW lastOrders AS
SELECT
DISTINCT ON (customerID)
    id,
    customerID,
    timestamp
FROM orders
ORDER BY customerID, timestamp desc;
Run Code Online (Sandbox Code Playgroud)