我需要获取N个最新标签的所有记录,即按时间戳排序。
我设法构建了以下查询来检索最新的 20 个标签。但是,当我尝试加入结果时,“限制”将影响总行数,而不是唯一标签的数量。
SELECT id, tag, timestamp
FROM items AS T1
WHERE NOT EXISTS (
SELECT *
FROM items AS T2
WHERE T2.tag = T1.id AND T2.timestamp > T1.timestamp
)
ORDER BY timestamp DESC
LIMIT 20;
因此,鉴于下表...
id | tag | timestamp
----+------------+------------
1 | Green | 2019-04-30
2 | Red | 2019-04-29
3 | Blue | 2019-04-28
4 | Green | 2019-04-27
5 | White | 2019-04-26
6 | Red | 2019-04-25
7 | Black | 2019-04-24
8 | Blue | 2019-04-23
9 | Red | 2019-04-22
10 | Black | 2019-04-21
... 对最近 3 个最新标签的查询应输出以下内容或类似内容:
id | tag | timestamp
----+------------+------------
1 | Green | 2019-04-30
4 | Green | 2019-04-27
2 | Red | 2019-04-29
6 | Red | 2019-04-25
9 | Red | 2019-04-22
3 | Blue | 2019-04-28
8 | Blue | 2019-04-23
如果你想要最近的 20 个,有重复的:
SELECT id, tag, timestamp
FROM items i
WHERE i.tag IN (SELECT i2.tag
FROM i2
ORDER BY timestamp DESC
FETCH FIRST 20 ROWS ONLY
);
ORDER BY timestamp DESC ;
如果你想要最近的 20 个没有重复的:
SELECT id, tag, timestamp
FROM items i
WHERE i.tag IN (SELECT i2.tag
FROM i2
GROUP BY i2.tag
ORDER BY MAX(timestamp) DESC
FETCH FIRST 20 ROWS ONLY
);
ORDER BY timestamp DESC
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句