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 首先分组,然后按顺序检索所有行?_Mysql_Sql_Database_Sqlite_Group By - Fatal编程技术网

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、 如果你需要其他的东西,你需要具体一点。这并不像你做的那么难。你根本不需要分组。