mysql - MySql Group by 但仍显示所有行
问题描述
我有以下数据库
ID | 图像名 | 测试结果 | 样品参考 | 上传时间 | 订单号 |
---|---|---|---|---|---|
1 | 文件名1.png | 无效的 | ABC123 | 2021-08-19 12:00 | 1002 |
2 | 文件名2.png | 无效的 | ABC123 | 2021-08-19 13:00 | 1001 |
3 | 文件名3.png | 无效的 | ABC123 | 2021-08-19 14:00 | 1002 |
4 | 文件名4.png | 无效的 | ABC123 | 2021-08-19 15:00 | 1001 |
我正在使用 SQL 查询
SELECT *
FROM results
WHERE imagename IS NOT NULL
AND testresult IS NULL
AND sampleref LIKE 'LAT%'
ORDER BY testresult IS NULL DESC, uploadedat
LIMIT 25
但是我想按(但不是聚合分组)分组orderid
,以便结果显示为
ID | 图像名 | 测试结果 | 样品参考 | 上传时间 | 订单号 |
---|---|---|---|---|---|
1 | 文件名1.png | 无效的 | ABC123 | 2021-08-19 12:00 | 1002 |
3 | 文件名3.png | 无效的 | ABC123 | 2021-08-19 14:00 | 1002 |
2 | 文件名2.png | 无效的 | ABC123 | 2021-08-19 13:00 | 1001 |
4 | 文件名4.png | 无效的 | ABC123 | 2021-08-19 15:00 | 1001 |
在这里,我们最初按顺序排序,uploadedat
但随后显示其余结果,匹配orderid
基本上将它们分组在一起,但仍显示每一行。
我不能使用ORDER BY orderid, uploadedat
,因为这会将第 2 行和第 4 行放在第 1 行和第 3 行之上
解决方案是什么?是否使用 2 个选择语句,第一个选择 * 并在 orderid 和 orderby 上载at 上进行分组,然后在 orderid = $Row ['orderid'] 处没有分组的第二个?或者有没有办法为此在单个语句中执行 JOIN 或双重选择?
谢谢?
解决方案
您想首先按uploadedat
每个orderid
.
如果您的 MySql 版本是 8.0+,您可以使用MIN()
窗口函数:
SELECT *
FROM results
WHERE imagename IS NOT NULL
AND testresult IS NULL
ORDER BY MIN(uploadedat) OVER (PARTITION BY orderid),
uploadedat
对于以前的版本,使用相关子查询:
SELECT r1.*
FROM results r1
WHERE r1.imagename IS NOT NULL
AND r1.testresult IS NULL
ORDER BY (SELECT MIN(r2.uploadedat) FROM results r2 WHERE r2.orderid = r1.orderid),
r1.uploadedat
见演示。
推荐阅读
- java - 如何在有向图中从特定顶点执行 BFS 或 DFS,其中某些顶点的出度为 0?
- c# - LINQ 语句以 100 个块执行 DynamicTableEntities 的嵌套列表
- python - Pandas 通过保留一列的第一个元素和另一列的最后一个元素来合并
- xml - 刷新存储在 Google Docs 上的 KML 文件
- prometheus - 普罗米修斯:我如何用 2 个不同的指标求和
- python - 如果用户输入的涂料不等于字母打印错误消息
- android - Flutter:改变移动设备方向时如何构建移动块的逻辑?
- javascript - 如何在具有角度的 iframe 中找到子节点并设置它们的样式?
- excel - 为什么 Range.Find() 方法如此混乱?
- c++ - 使用 isdigit 通知任何检测到的非法字符