sql - postgresql中的分组问题

标签 sql postgresql group-by

假设我有一个创建为“订单”的表:

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/

相关文章:

python - 使用 python 的字典创建一个通用的 MySQL 插入字符串

php - 如何在 PostgreSQL 中实现循环

c# - x32 应用程序可以使用 x64 数据库吗?

r - 使用 purrr 将映射函数应用于分组数据框

mysql - 如何正确执行查询?

sql - 简单的 SQL - 计数函数

mysql - 表 JOIN 没有像在 mysql 中应该的那样工作

postgresql - Apache super 集 : Migrate from sqlite to Postgres

mysql - MAX 和 GROUP BY 不返回好的值

C# INSERT 与 INSTEAD OF INSERT 触发器