【发布时间】:2016-11-17 19:32:50
【问题描述】:
我有一个 Postgresql 数据库,但我无法正确查询,尽管这似乎是一个常见问题。
我的桌子是这样的:
CREATE TABLE orders (
account_id INTEGER,
order_id INTEGER,
ts TIMESTAMP DEFAULT NOW()
)
每次有新订单,我都会用它来链接account_id和order_id。
现在我的问题是我想获得一个列表,其中包含每个帐户的最后一个订单(通过查看 ts)。
例如,如果我的数据是:
account_id order_id ts
5 178 July 1
5 129 July 6
4 190 July 1
4 181 July 9
3 348 July 1
3 578 July 4
3 198 July 1
3 270 July 12
然后我希望查询只返回每个帐户的最后一行:
account_id order_id ts
5 129 July 6
4 181 July 9
3 270 July 12
我已经尝试过GROUP BY account_id,我可以使用它来获取每个帐户的MAX(ts),但是我无法获取关联的order_id。我也尝试过子查询,但我似乎无法正确处理。
谢谢!
【问题讨论】:
-
您必须有一些主键,因此请使用“LIMIT 1”和“ORDER BY id DESC”。它颠倒顺序并将其限制为 1(因此最高 id 是第一个结果,limit 然后只取这 1 个结果)。
-
@Rajat 我不想要一行,我想要每个 account_id 一行。
-
@Janis 谢谢,但答案是加入两个表。我只有一张桌子。另外,我正在使用 Postgresql。
标签: sql postgresql greatest-n-per-group