MySQL通过特殊情况分组

时间:2018-05-15 06:21:27

标签: mysql

我有两个名为Master Websites和Defacement Monitor的表

Master website Table

Defacement Monitor Table

master_website表包含系统中的所有网站,以及填充了每个网站状态的污损监控状态表。我们可以添加网站的状态,其中包含任何日期和时间状态“安全”,“污损”,“破坏”,“正常”等,我想要的是“安全'正常''破坏'只考虑每个网站的最后一个条目。 有什么帮助吗? 对不起,我的英语不好 提前致谢

1 个答案:

答案 0 :(得分:1)

您可以将这些表连接在一起,然后对监控表执行LEFT OUTER JOIN以查找更新的行。使用WHERE子句,您可以忽略找到较新者的任何行。

像这样: -

SELECT dm1.defacement_status, COUNT(dm1.id)
FROM master_website_table m
INNER JOIN defacement_monitor_table dm1
ON m.id = dm1.website_id
LEFT OUTER JOIN defacement_monitor_table dm2
ON m.id = dm2.website_id
AND dm1.defacement_datetime < dm2.defacement_datetime
WHERE dm2.id IS NULL
GROUP BY dm1.defacement_status

请注意,如果当前未使用任何状态,则它不会出现在结果中(即,您不会获得0的计数)。最好有一张包含可能状态的表格。 (那么你的监控表只能使用这个表中的id而不是状态文本)。