Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
帮助进行复杂的MySQL查询(使用LIMIT?)_Mysql_Sql_Limit - Fatal编程技术网

帮助进行复杂的MySQL查询(使用LIMIT?)

帮助进行复杂的MySQL查询(使用LIMIT?),mysql,sql,limit,Mysql,Sql,Limit,我想知道是否有人可以帮助我编写一个MySQL查询,以返回相关结果 我有一个很大的变更日志数据表,我想检索一些记录“组”。例如,在这种情况下,一个组中输入了两个或多个具有相同时间戳的记录 ============================================== ID DATA TIMESTAMP ============================================== 1 Some text

我想知道是否有人可以帮助我编写一个MySQL查询,以返回相关结果

我有一个很大的变更日志数据表,我想检索一些记录“组”。例如,在这种情况下,一个组中输入了两个或多个具有相同时间戳的记录

==============================================
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
与什么有关(在最后两行)?@user2761030
tt
是一个表别名。这是一个表的缩写,可以在整个查询过程中使用(如
on
子句中所示)。当同一个表在
from
子句中多次出现时,需要它们。它们在其他方面是可取的,因为它们可以使查询更易于阅读。@user2761030这里您可以看到它的作用(它返回什么数据使其更可见)注意,您还应该在没有索引时间戳的情况下索引时间戳mysql还需要取消额外排序,并且需要更多的完整表扫描