Mysql 首先分组,然后按顺序检索所有行?
我有一张有身份证和时间的桌子Mysql 首先分组,然后按顺序检索所有行?,mysql,sql,database,sqlite,group-by,Mysql,Sql,Database,Sqlite,Group By,我有一张有身份证和时间的桌子 ID | Time 1 | 8.35 1 | 8.40 3 | 8.43 4 | 8.45 1 | 8.50 2 | 8.52 3 | 8.54 4 | 8.55 1 | 8.57 2 | 9.01 3 | 9.05 5 | 9.06 要求的结果 ID | Time 5 | 9.06 3 | 9.05 3 | 8.54 3 | 8.43 2 | 9.01 2 | 8.52 1 |
ID | Time
1 | 8.35
1 | 8.40
3 | 8.43
4 | 8.45
1 | 8.50
2 | 8.52
3 | 8.54
4 | 8.55
1 | 8.57
2 | 9.01
3 | 9.05
5 | 9.06
要求的结果
ID | Time
5 | 9.06
3 | 9.05
3 | 8.54
3 | 8.43
2 | 9.01
2 | 8.52
1 | 8.57
1 | 8.50
1 | 8.40
1 | 8.35
4 | 8.55
4 | 8.45
目前,我正在通过Select*从表组中按ID排序按时间描述进行操作
结果一:
ID | Time
5 | 9.06
3 | 9.05
2 | 9.01
1 | 8.57
4 | 8.55
然后写入第二个查询并将数据存储在列表中
foreach value in Result one:
Select * from Table where ID = value
与编写循环不同,我只希望有一个查询
基本问题是我想分组ID,最上面的组应该是最近发生的项目。在例子1中出现了很多时间,但是我只考虑最新的分组时间。
我可以只写一个查询来获得结果吗?选择ID,从表中按ID排序的时间,时间
分组组合匹配的行,因此您不想分组,排序将它们按顺序排列,这就是您想要的,您希望所有ID按顺序排列,然后在这些ID内按顺序排列,因此您希望按ID排序,然后按时间排序
由于问题编辑而更新
这可以通过连接到子选择来完成
SELECT t.ID. t.Time FROM Table t
JOIN (SELECT ID, Max(Time) as Time FROM Table GROUP BY ID) ss
ON t.ID = ss.ID
ORDER BY ss.Time DESC, t.ID DESC, t.Time DESC
子选择(ss)执行您在那里的第一个查询,并将其连接到主表,允许您按每个ID的最高(最大)时间排序,然后按ID和行本身的时间排序。请注意,所有的排序都是在最终查询中完成的,在子选择中进行排序是无用的,因为联接无论如何都会对其进行重新排序。显示您正在使用的查询请提供一些示例数据和所需的输出。(请参阅以了解如何添加一些。)从表中选择*按Id排序,时间
您需要“每个Id的所有行”,然后不需要分组。只要运行每个人都建议的查询选择id,time FROM Table ORDER BY id,time
,您就会得到您请求的确切结果。如果您的表中有一个没有时间的id,并且您想阻止该id通过,那么添加WHERE子句(这里完全是猜测,因为这不在您的示例数据中,但您的描述表明这是可能的):SELECT id,time FROM table WHERE time NOT NULL ORDER BY id,time;
如果我从table ORDER BY id,time中选择id,那么它将返回每个id的第一个ORDER BY id,然后返回每个id的时间。我正在查找所有计时,查询将选择具有最大时间的第一个id,然后忽略时间并显示该id的所有项ID@Ips我不太明白很抱歉,中的问题的解决方案是,查询一:按数字按时间顺序分组。查询二,现在我将遍历上一个查询中的ID以检索所有项目。但我正在查找一个query@Ips你需要更清楚地知道你想要什么,我在这里写的查询将按照它的顺序给你“我需要”下面列出的数据e、 如果你需要其他的东西,你需要具体一点。这并不像你做的那么难。你根本不需要分组。