首页 > 解决方案 > SQL - 选择唯一行且超过 4 小时

问题描述

我正在尝试选择所有超过 4 小时的行,只有唯一的行,并将它们限制为 250 行。

我的数据库如下所示:

id | titleid | version | timestamp
1  | TEST1   | 1.00    | 2019-03-23 02:40:33
2  | TEST1   | 1.01    | 2019-03-23 02:40:33
3  | TEST1   | 1.02    | 2019-03-23 02:40:33
4  | TEST2   | 1.50    | 2019-03-23 02:40:33
5  | TEST2   | 1.51    | 2019-03-23 02:40:33

我有这个查询:

SELECT m1.*
FROM patch_queue m1
LEFT JOIN patch_queue m2 ON (m1.titleid = m2.titleid AND m1.id < m2.id)
WHERE timestamp <= DATE_SUB(NOW(), INTERVAL 4 HOUR) AND m2.id IS NULL
LIMIT 250

哪个应该可以解决问题。我只是不确定如何将它组合成一个。它抛出:

where 子句中的列“时间戳”不明确

有谁碰巧知道我该怎么做?

期望的结果:

id | titleid | version | timestamp // they're all older than 4 hours in this case
3  | TEST1   | 1.02    | 2019-03-23 02:40:33
5  | TEST2   | 1.51    | 2019-03-23 02:40:33

标签: sql

解决方案


我假设您希望每 1 行titleid,其中titleid4 小时内没有记录:

select t.*
from t
where t.timestamp = (select max(t2.timestamp)
                     from t t2
                     where t2.titleid = t.titleid
                    ) and
      t.timestamp < now() - interval 4 hour
order by timestamp desc
limit 250;

推荐阅读