在Postgres分组

时间:2014-12-08 16:35:45

标签: sql postgresql group-by greatest-n-per-group

我有以下订单表:

| id | user_id | order_date |
| 1  | 5       | 24/03/2014 |
| 2  | 5       | 25/02/2014 |
| 3  | 6       | 25/06/2014 | 

我想要一个查询,为我的每个用户返回最大order_date。在我的例子中,结果将是:

| id | user_id | order_date |
| 1  | 5       | 24/03/2014 |
| 3  | 6       | 25/06/2014 | 

我尝试了以下查询:

select user_id, id, max(order_date) 
from order
GROUP BY cmd_user_id;

但是这段代码会产生以下错误:column" order.id"必须出现在GROUP BY子句中或用于聚合函数。

我不知道该怎么做。有谁可以帮助我吗?

我觉得我需要一个小组,因为这是我的查询的开始。我想,之后添加一些额外条件来选择订单(例如,通过特定付款方式支付的订单以及过去10天,但我将始终对过去10天的最大日期感兴趣。)

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

select user_id, id, max(order_date) from order GROUP BY cmd_user_id;

select和group by中的字段不匹配,但我认为user_id和cmd_user_id是相同的字段,这是一个错字。 无论如何,如果使用group by,则select部分中的字段必须具有聚合函数,如max(order_date),或者必须按cmd_user_id等字段包含在组中。 就像Kouber所说,从选择部分中删除id字段,在其上使用聚合函数或将其包含在group by字段中。