Sql 博士后分组

Sql 博士后分组,sql,postgresql,group-by,greatest-n-per-group,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 | 我希望查询返回表中每个用户的最大订单日期。在我的例子中,结果是: | id | user_id | order_date | | 1 | 5 | 24/03/2014 | | 3 | 6 | 25/06/201

我有以下订单表:

| id | user_id | order_date |
| 1  | 5       | 24/03/2014 |
| 2  | 5       | 25/02/2014 |
| 3  | 6       | 25/06/2014 | 
我希望查询返回表中每个用户的最大订单日期。在我的例子中,结果是:

| 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天的最长日期感兴趣

非常感谢你的帮助

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部件中的字段必须具有聚合函数,如maxorder_date,或者必须包含在group by字段中,如cmd_user_id。 正如Kouber所说,从选择部分中删除id字段,对其使用聚合函数或将其包含在group by字段中。

只需从查询中删除id列即可。