SQL-选择唯一的行和早于4小时的行

SQL-选择唯一的行和早于4小时的行,sql,Sql,我试图选择所有超过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-2

我试图选择所有超过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

我假设您希望每个标题ID有一行,其中标题ID在过去4小时内没有记录:

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;
您只需要指定m1.timestamp:


预期的结果是什么?WHERE子句中的哪个时间戳?如果它是来自m1的,那么写m1.timestamp;如果是m2中的数据,那么写m2.timestamp。为什么显示一个表中的样本数据,然后使用两个表进行查询?期望的结果会很有帮助。谢谢你的投入,戈登。我已经更新了我的问题,因为我丢失了一些信息。很抱歉。也许现在更清楚了。@AppelFlap。你是说这没有产生预期的结果吗?
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;
SELECT m1.*
FROM patch_queue m1
LEFT JOIN patch_queue m2 ON (m1.titleid = m2.titleid AND m1.id < m2.id)
WHERE m1.timestamp <= DATE_SUB(NOW(), INTERVAL 4 HOUR) AND m2.id IS NULL
LIMIT 250
id  titleid version timestamp
3   TEST1   1.02    2019-03-23 02:40:33
5   TEST2   1.51    2019-03-23 02:40:33