我在DB中有一个表,其中包含以下列:
现在,我需要选择具有特定类型和时间的所有操作,并使用file_id删除文件。问题是我可能从该查询中获得了几行,但我只需要一个,最后添加到DB中。
假设DB中的示例记录:
_id = 1, action_type = 1, file_id= 1, time = 1000
_id = 2, action_type = 1, file_id= 1, time = 2000
_id = 3, action_type = 1, file_id= 1, time = 3000
_id = 4, action_type = 1, file_id= 2, time = 1000
_id = 5, action_type = 1, file_id= 2, time = 2000
_id = 6, action_type = 1, file_id= 2, time = 3000
现在,我只需要_id = 3和_id = 6的记录。我该如何构建这样的查询?
注意:我正在使用SQLite。
答案 0 :(得分:2)
好的,您可以获取所有不同file_id的最新记录。通常,此请求应在sqlite中正常工作:
SELECT file_id,
_id,
action_type,
Max(time)
FROM test
GROUP BY file_id;
编辑:
好的,您的请求更复杂:
SELECT `_id`, `action_type`, `file_id`, `time` FROM testtable t1
GROUP BY file_id
HAVING time = (
SELECT MAX(time) FROM testtable t2
WHERE t2.file_id = t1.file_id
)
答案 1 :(得分:1)
您可以使用子查询来获得此结果:
SELECT _id, file_id
FROM table t
WHERE action_type = x
AND t.time = (SELECT Max(time)
FROM Table s
WHERE s.action_type = t.action_type
AND s.file_id = t.file_id)
有关如何使用子查询,请参阅以下链接: http://www.tutorialspoint.com/sqlite/sqlite_sub_queries.htm
答案 2 :(得分:1)
如果您的表格每个文件不包含两次相同的时间戳,则可以使用
SELECT * FROM yourtable WHERE time = (SELECT max(time) FROM yourtable)
无需按file_id
分组或打扰它,因为每个文件的时间戳不能超过1个。
_ID ACTION_TYPE FILE_ID TIME
------------------------------------------------
3 1 1 3000
6 1 2 3000