sql - 从 SQL Server 中的 MAX() GROUP BY 中选择行
问题描述
我有一张我打电话的桌子Eventos
。outTime
我必须从警报中选择相应的较大的inTime
。
我必须快速/优化它。我在表中有大约 100 万个条目。
这是我的代码:
SELECT
CadGrupoEventos.Severidade AS Nível,
CadGrupoEquipamentos.Nome AS Grupo,
CadEquipamentos.TAG AS Equipamento,
CadEventos.MensagemPT AS 'Mensagem de alarme',
MAX(Eventos.InTime) AS 'Hora do evento',
Eventos.OutTime AS 'Hora de saída'
FROM
CadGrupoEventos,
CadEquipamentos,
CadEventos,
Eventos,
CadUsuarios,
CadGrupoEquipamentos
WHERE
Eventos.Acked = 0
AND CadGrupoEventos.Codigo = CadEventos.Grupo
AND CadEquipamentos.Codigo = Eventos.TAG
AND CadEventos.Codigo = Eventos.CodMensagem
AND CadGrupoEquipamentos.Codigo = CadEquipamentos.Grupo
GROUP BY
CadGrupoEventos.Severidade,
CadEquipamentos.TAG,
CadEventos.MensagemPT,
CadGrupoEquipamentos.Nome,
Eventos.OutTime
该代码实际上返回表中的每一个条目。
我必须Eventos.OutTime
取出GROUP BY
并仍然获得它的价值。
解决方案
这只是根据您的描述进行的有根据的猜测。请注意,我使用了更加明确的 ANSI-92 样式连接。我还使用了别名来使它更清晰易读。您的查询可能看起来像这样。
select x.Severidade AS Nível,
x.Nome AS Grupo,
x.TAG AS Equipamento,
x.MensagemPT AS [Mensagem de alarme],
x.[Hora do evento],
x.OutTime AS [Hora de saída]
from
(
SELECT cge.Severidade,
cgequip.Nome,
ce.TAG,
cevt.MensagemPT,
MAX(e.InTime) AS [Hora do evento],
e.OutTime
, RowNum = ROW_NUMBER() over(partition by cge.Severidade, ce.TAG, cevt.MensagemPT, cgequip.Nome order by e.OutTime /*maybe desc???*/)
FROM CadGrupoEventos cge
join CadEventos cevt on cge.Codigo = cevt.Grupo
join Eventos e on AND cevt.Codigo = e.CodMensagem
join CadEquipamentos ce on ce.Codigo = e.TAG
join CadGrupoEquipamentos cgequip on cgequip.Codigo = ce.Grupo
cross join CadUsuarios cu --not sure if this is really what you want but your original code did not have any logic for this table
WHERE e.Acked = 0
GROUP BY cge.Severidade,
ce.TAG,
cevt.MensagemPT,
cgequip.Nome,
e.OutTime
) x
where x.RowNum = 1
推荐阅读
- html - 如何使用 XSL-Transformations 将 Markdown 语言从 XML CDATA 元素转换为 HTML 和 XSL:FO?
- python - 尝试使用 numpy 数组绘制对数拟合时出现 ValueError
- powershell - SSH 命令 PowerShell
- python - 在 macOS Big Sur 上安装 PyOpenGL
- javascript - Puppeteer cluster.close() 在调用 cluster.queue() 后“崩溃”
- azure - 在客户租户中创建应用注册的最佳实践
- powershell - Powershell - 将文本放入变量中,使用文本替换另一个文本文件中的文本
- reactjs - 如何在 react/redux 的页面刷新期间处理对后端的异步 api 调用?
- sql - 如何使用 html 表单从 SQL 服务器检索数据?
- javascript - 拖动文本选择时发生了什么?