mysql - 首先 Group By 按顺序检索所有行?

标签 mysql sql database sqlite group-by

我有一个表,里面有 ID 和时间。

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 * from table group by ID order by Time DESC 并获取

结果一:

  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、时间 ORDER BY 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 和时间排序。请注意,所有排序都是在最终查询中完成的,子选择中的排序是无用的,因为连接无论如何都会对其重新排序。

关于mysql - 首先 Group By 按顺序检索所有行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48287566/

相关文章:

mysql - 时间段的SQL

php - 在定制论坛上获取热门话题

sql - 从字符串中删除所有元音 - PL/SQL

sql - 一个 DBMS 可以支持多种 DSL 语言吗?

mysql - 对非常大的数据集进行分页

activerecord - Codeigniter 有几个像或这样的事件记录?

php - jQuery 计时问题?使用 PHP/mssql

sql - 如何向 MySQL 重复原始 SQL 查询 # 次?

java - 添加新字段或更改所有 Firestore 文档的结构

PHP (WAMP) OCI8 驱动设置问题