帮助进行复杂的MySQL查询(使用LIMIT?)
我想知道是否有人可以帮助我编写一个MySQL查询,以返回相关结果 我有一个很大的变更日志数据表,我想检索一些记录“组”。例如,在这种情况下,一个组中输入了两个或多个具有相同时间戳的记录帮助进行复杂的MySQL查询(使用LIMIT?),mysql,sql,limit,Mysql,Sql,Limit,我想知道是否有人可以帮助我编写一个MySQL查询,以返回相关结果 我有一个很大的变更日志数据表,我想检索一些记录“组”。例如,在这种情况下,一个组中输入了两个或多个具有相同时间戳的记录 ============================================== ID DATA TIMESTAMP ============================================== 1 Some text
==============================================
ID DATA TIMESTAMP
==============================================
1 Some text 1379000000
2 Something 1379011111
3 More data 1379011111
这是一张样品表
==============================================
ID DATA TIMESTAMP
==============================================
1 Some text 1379000000
2 Something 1379011111
3 More data 1379011111
3 Interesting data 1379022222
3 Fascinating text 1379033333
如果我想要前两个分组集,我可以使用LIMIT 0,2
,但这将错过第三条记录。理想的查询将返回三行(因为两行具有相同的时间戳)
目前,我一直在使用PHP处理整个表,这大部分是有效的,但对于一个包含1000多条记录的表,这在内存使用方面不是很有效
非常感谢您提供的任何帮助…使用
加入获取过滤的时间戳。例如,以下内容将确保第二个时间戳位于已完成的组中:
select t.*
from t join
(select timestamp
from t
order by timestamp
limit 2
) tt
on t.timestamp = tt.timestamp;
以下是前三组,无论大小:
select t.*
from t join
(select distinct timestamp
from t
order by timestamp
limit 3
) tt
on t.timestamp = tt.timestamp;
查询如何知道ID=1包含在(2,3)中的ID中?它有一个不同的时间戳。这是伟大的,工作得非常好!为了帮助我理解将来使用的代码,我可以问一下tt
与什么有关(在最后两行)?@user2761030tt
是一个表别名。这是一个表的缩写,可以在整个查询过程中使用(如on
子句中所示)。当同一个表在from
子句中多次出现时,需要它们。它们在其他方面是可取的,因为它们可以使查询更易于阅读。@user2761030这里您可以看到它的作用(它返回什么数据使其更可见)注意,您还应该在没有索引时间戳的情况下索引时间戳mysql还需要取消额外排序,并且需要更多的完整表扫描