我有以下数据。
--------------------------------------------------------------------------------
id | value_name | last_modified | system_id | value_data |
--------------------------------------------------------------------------------
1 | name1 | 2012-06-04 | 1 | aaa |
2 | name1 | 2012-02-04 | 1 | bbb |
3 | name1 | 2012-04-25 | 1 | ccc |
4 | name2 | 2012-07-04 | 1 | ddd |
5 | name2 | 2012-06-14 | 1 | eee |
6 | name3 | 2011-09-05 | 1 | qqq |
--------------------------------------------------------------------------------
现在我只需要获取最近修改的值。
更新
对于上表,我想得到以下结果
--------------------------------------------------------------------------------
id | value_name | last_modified | system_id | value_data |
--------------------------------------------------------------------------------
1 | name1 | 2012-06-04 | 1 | aaa |
4 | name2 | 2012-07-04 | 1 | ddd |
6 | name3 | 2011-09-05 | 1 | qqq |
--------------------------------------------------------------------------------
我在这里和谷歌搜索了很多,但我能找到的解决方案实际上并不起作用。例如,建议的解决方案之一是使用连接。
SELECT
v.[id],
v.[system_id],
v.[value_name],
v.[value_data]
FROM
[values] v INNER JOIN
(
SELECT
v.[id],
MAX(v.[last_modified]) AS last_modified
FROM
[values] v
WHERE
v.[system_id] = 1
GROUP BY
v.[id]
) s
ON
v.[id] = s.[id]
但是子查询是按id
(唯一的)分组的,所以它不会计算最大最后修改日期。我正在使用 SQLite,这样的简单查询对我有用
SELECT
v.[id],
v.[system_id],
v.[value_name],
v.[value_data],
MAX(v.[last_modified]) AS last_modified
FROM
[values] v
WHERE
v.[system_id] = 1
GROUP BY
v.[value_name]
但我记得在 Oracle 中,您不能选择未在聚合函数或 group by 语句中列出的字段,所以我不确定这是否能保证给我预期的结果。任何建议如何解决?
提前致谢。