MySQL查询,历史值表中的最新值

时间:2011-04-13 22:25:21

标签: php sql sqlite

我有一张有历史价值的表格。每次更新其中一个值时,该值的副本将添加到由“request_id”索引的此表中

我正在寻找离开以获取每个“request_id”的最新值,而无需检索整个表。

当前表:

ID | Modified | request_id | value 
-------------------------------------
 1 |       10 |          1 | "one"
 2 |       15 |          1 | "two"
 3 |       15 |          2 | "three"
 4 |       18 |          1 | "fore"
 5 |       25 |          3 | "five"
 6 |       36 |          1 | "six"

结果表

ID | Modified | request_id | value 
-------------------------------------
 3 |       15 |          2 | "three"
 5 |       25 |          3 | "five"
 6 |       36 |          1 | "six"

如果它有任何区别,我正在使用PHP和SQLite。

3 个答案:

答案 0 :(得分:3)

SQLite的? Hmz,无法测试但是试试这个:

SELECT value FROM your_table GROUP BY request_id ORDER BY modifier;

如果您对此查询有任何疑问,请发布错误,我们会尝试修复。

答案 1 :(得分:1)

我的语法可能略有错误,但这应该指向正确的方向。

"SELECT DISTINCT request_id FROM history_table ORDER BY modified"

这只会获取每个request_id中的一个,因此您不会获得重复项。

答案 2 :(得分:-1)

SELECT *
FROM test_table t1
WHERE t1.modified IN (SELECT max(Modified)
                      FROM test_table t2
                      WHERE t2.request_id = t1.request_id
                      GROUP By t2.request_id)

注意:这不是一种非常有效的方法,因为它具有相关的子查询。

编辑:没有相关性,对于PostgreSQL

SELECT * FROM test
WHERE (request_id, modified) IN (SELECT request_id, max(modified)
                                 FROM test
                                 GROUP BY request_id);