column must appear in the GROUP BY clause

szzfl 2014-02-13 05:56:58
mysql下:
mysql> select * from temp;
+------+--------+------------+
| id | amount | date |
+------+--------+------------+
| 1 | 10 | 2013-10-11 |
| 2 | 30 | 2013-11-11 |
| 3 | 5 | 2013-12-14 |
| 1 | 15 | 2013-12-10 |
| 3 | 1 | 2013-12-25 |
+------+--------+------------+
取每个id最近一天的amount。

mysql> select *from (select * from temp order by date desc) temp group by id;
+------+--------+------------+
| id | amount | date |
+------+--------+------------+
| 1 | 15 | 2013-12-10 |
| 2 | 30 | 2013-11-11 |
| 3 | 1 | 2013-12-25 |
+------+--------+------------+

在pgsql或者标准sql中,将会报错:
ERROR: column xxxx must appear in the GROUP BY clause or be used in an aggregate function

请问类似功能在标准sql中如何写?
...全文
4293 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
DB_tester 2015-01-02
  • 打赏
  • 举报
回复
postgres=# select * from temp where date in (select max(date) from temp group by id); id | amount | date ----+--------+------------ 2 | 30 | 2013-11-11 1 | 15 | 2013-12-10 3 | 1 | 2013-12-25 (3 行记录) 使用了你的前5条记录作为例子
ghostkngiht 2014-02-18
  • 打赏
  • 举报
回复
select id, SUM(amount), MAX(date) from temp group by id;
懒得去死 2014-02-14
  • 打赏
  • 举报
回复
给你个例子,对着改下。
t_girl=# select * from inc_test;
 id |   l_date   
----+------------
  3 | 2014-01-25
  3 | 2014-01-29
  1 | 2014-02-01
  1 | 2014-02-11
  1 | 2014-02-05
  2 | 2014-02-10
  2 | 2014-01-31
(7 rows)

t_girl=# select id,l_date from (select id,l_date, row_number() over(partition by id order by l_date desc ) as rank from inc_test) as a where a.rank = 1;
 id |   l_date   
----+------------
  1 | 2014-02-11
  2 | 2014-02-10
  3 | 2014-01-29
(3 rows)
ACMAIN_CHM 2014-02-14
  • 打赏
  • 举报
回复
参考下贴中的多种方法 http://blog.csdn.net/acmain_chm/article/details/4126306 [征集]分组取最大N条记录方法征集,及散分....
szzfl 2014-02-14
  • 打赏
  • 举报
回复
有没有人知道啊?

954

社区成员

发帖
与我相关
我的任务
社区描述
PostgreSQL相关内容讨论
sql数据库数据库架构 技术论坛(原bbs)
社区管理员
  • PostgreSQL社区
  • yang_z_1
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧