【发布时间】:2015-12-09 01:01:15
【问题描述】:
使用 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';
为thing="watermelon" 获取key="color" 的最新值:
SELECT *
FROM Properties
WHERE thing='watermelon'
AND key='color'
ORDER BY timestamp DESC
LIMIT 1;
但我不知道如何将两者结合起来。我可能是从命令式编程的角度来解决这个问题的,这就是为什么我会感谢帮助。
【问题讨论】:
标签: sql sqlite greatest-n-per-group