使用Sqlite,我想获取时间戳最大的行集合。该表包含项的属性,即键-值对和时间戳。我想为每个属性选择最新值。
考虑以下简化的架构和数据:
CREATE TABLE Properties (thing VARCHAR,
key VARCHAR,
value VARCHAR,
timestamp INT);
INSERT INTO Properties VALUES ("apple", "color", "red", 0);
INSERT INTO Properties VALUES ("apple", "taste", "sweet", 0);
INSERT INTO Properties VALUES ("apple", "size", "small", 0);
INSERT INTO Properties VALUES ("watermelon", "taste", "sweet", 0);
INSERT INTO Properties VALUES ("watermelon", "size", "large", 0);
INSERT INTO Properties VALUES ("watermelon", "color", "pink", 1);
INSERT INTO Properties VALUES ("watermelon", "color", "green", 0);
我想写一个查询
thing="watermelon"
返回:taste|sweet
size|large
color|pink
请注意,有两个带有
key="color"
的行,查询将返回具有最大timestamp
值的行。同样,一个属性的最大timestamp
可能与另一属性不同。到目前为止,我尝试过的内容包括:
获取
thing="watermelon"
的属性集:SELECT DISTINCT(key) FROM Properties WHERE thing='watermelon';
获取
key="color"
的最新值thing="watermelon"
:SELECT *
FROM Properties
WHERE thing='watermelon'
AND key='color'
ORDER BY timestamp DESC
LIMIT 1;
但是我不知道如何将两者结合起来。我可能是从命令式编程的角度来解决这个问题的,这就是为什么我需要帮助。
最佳答案
在SQLite 3.7.11或更高版本中,您可以简单地使用MAX()从组中选择一行:
SELECT key, value, MAX(timestamp)
FROM Properties
WHERE thing = 'watermelon'
GROUP BY key;
关于sql - 如何选择每个项目具有最大时间戳的行集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32540876/