mysql - 只有几列联合的最大值(值)
问题描述
我想按最高时间为每个 [Group] 检索一个结果。
当前代码的结果:
SELECT [Group], ArticleNumber, max(TimeTrue) as Time
FROM PerformanceOpc (NOLOCK) WHERE ([Group]='Pack2' OR [Group]='70521-030')
GROUP BY [Group], ArticleNumber
UNION
SELECT [Group], ArticleNumber, max(StopTime) as Time
FROM StoppageOpc (NOLOCK) WHERE ([Group]='Pack2' OR [Group]='70521-030')
GROUP BY [Group], ArticleNumber
ORDER BY Time DESC
结果应该只有两条记录(csv):
Group,ArticleNumber,Time
70521-030,,2021-03-15 13:50:15
Pack2,183026,2021-03-15 13:47:39
解决方案
嗯。. . 您似乎想要union all
在汇总之前:
SELECT [Group], ArticleNumber, max(Time) as Time
FROM ((SELECT [Group], ArticleNumber, TimeTrue as Time
FROM PerformanceOpc
WHERE [Group] IN ('Pack2', '70521-030')
) UNION ALL
(SELECT [Group], ArticleNumber, StopTime as Time
FROM StoppageOpc
WHERE [Group] IN ('Pack2', '70521-030')
)
) g
GROUP BY [Group], ArticleNumber;
这将返回每组和每篇文章的一行,这似乎是您的查询正在执行的操作。
如果您真的只想要每组一行,那么您想要ROW_NUMBER()
而不是聚合:
SELECT g.*
FROM (SELECT g.*, ROW_NUMBER() OVER (PARTITION BY [Group] ORDER BY time DESC) as seqnum
FROM ((SELECT [Group], ArticleNumber, TimeTrue as Time
FROM PerformanceOpc
WHERE [Group] IN ('Pack2', '70521-030')
) UNION ALL
(SELECT [Group], ArticleNumber, StopTime as Time
FROM StoppageOpc
WHERE [Group] IN ('Pack2', '70521-030')
)
) g
) g
WHERE seqnum = 1;
推荐阅读
- javascript - 有没有办法让文本输入垂直对齐?
- linux - 在 Linux 上优雅地退出 PowerShell 后台等待事件循环
- flutter - 加载数据时如何等待或重建消费者
- excel - 如何修复 Excel VBA 中的宏错误?(我的代码运行很慢)
- git - 执行“git stash push -all”后如何从存储条目中恢复文件?
- azure - Azure DevOps:虚拟应用程序不支持使用 zip 部署选项发布
- python - 如何使用按钮执行命令并在命令结束之前将其删除?Python / Tkinter
- docker - 如何使用 docker-compose 从在 localhost 上运行的私有注册表中提取图像
- google-sheets-api - 使用 Javascript 可靠地增加/减少单元格
- regex - 使用 sed 或 awk 从字符串中删除前导和尾随数字,同时留下 2 个数字