【发布时间】:2011-08-14 12:12:53
【问题描述】:
我有一张桌子some_table 喜欢
+--------+----------+---------------------+-------+
| id | other_id | date_value | value |
+--------+----------+---------------------+-------+
| 1 | 1 | 2011-04-20 21:03:05 | 104 |
| 2 | 2 | 2011-04-20 21:03:04 | 229 |
| 3 | 3 | 2011-04-20 21:03:03 | 130 |
| 4 | 1 | 2011-04-20 21:02:09 | 97 |
| 5 | 2 | 2011-04-20 21:02:08 | 65 |
| 6 | 3 | 2011-04-20 21:02:07 | 101 |
| ... | ... | ... | ... |
+--------+----------+---------------------+-------+
我想要other_id1、2 和3 的最新记录。我想出的明显查询是
SELECT id, other_id, MAX(date_value), value
FROM some_table
WHERE other_id IN (1, 2, 3)
GROUP BY other_id
但是它会抛出一个“not a GROUP BY expression”异常。我尝试在GROUP BY 子句中添加所有其他字段(即id、value),但这只会返回所有内容,就像没有GROUP BY 子句一样。 (嗯,这也很有意义。)
所以...我正在阅读 Oracle SQL 手册,我能找到的只是一些示例,这些示例仅涉及具有两列或三列的查询以及一些我之前从未见过的分组函数。我该如何去和返回
+--------+----------+---------------------+-------+
| id | other_id | date_value | value |
+--------+----------+---------------------+-------+
| 1 | 1 | 2011-04-20 21:03:05 | 104 |
| 2 | 2 | 2011-04-20 21:03:04 | 229 |
| 3 | 3 | 2011-04-20 21:03:03 | 130 |
+--------+----------+---------------------+-------+
(每个other_id 的最新条目)?谢谢。
【问题讨论】: