在一个日期范围内显示每天的SQL分组数据
在一个日期范围内显示每天的SQL分组数据
我正在使用SQL查询来统计每种机器类型在一个日期范围内的机器错误数量。
以下是我的代码:
SELECT machine_type, COUNT(DISTINCT ID_machine) FROM MACHINE WHERE ID_MACHINE IN (SELECT DISTINCT MACHINE_ID_machine FROM TRACE WHERE (date_file BETWEEN '2020-10-01' AND '2020-10-02') AND (trace_status = 'OK')) GROUP BY machine_type
它可以工作,但是显示的是整个日期范围的数据,而不是指定日期范围内每天的数据。请问有人可以告诉我如何拆分日期并计算指定日期范围内每天的数量吗?非常感谢大家。
问题出现的原因是需要根据日期范围内的每一天来显示SQL分组数据。解决方法是使用SQL语句中的GROUP BY子句来按日期和机器类型进行分组。
下面是问题的解决方法:
首先,我们可以使用以下SQL语句来显示在日期范围内每天的SQL分组数据:
SELECT b.date_file, a.machine_type, count(DISTINCT a.ID_machine) FROM MACHINE a INNER JOIN `TRACE` b ON a.ID_MACHINE = b.MACHINE_ID_machine WHERE b.date_file BETWEEN '2020-10-01' and '2020-10-02' AND b.trace_status = 'OK' GROUP BY b.date_file, a.machine_type
如果需要按机器类型的顺序进行分组,可以改变日期和机器类型的顺序:
SELECT a.machine_type, b.date_file, count(DISTINCT a.ID_machine) FROM MACHINE a INNER JOIN `TRACE` b ON a.ID_MACHINE = b.MACHINE_ID_machine WHERE b.date_file BETWEEN '2020-10-01' and '2020-10-02' AND b.trace_status = 'OK' GROUP BY a.machine_type, b.date_file
假设一台机器在一天内可能出现多个错误,而您希望按机器类型计算所有这些错误的数量,这需要对查询进行如下更改:
SELECT b.date_file, a.machine_type, count(b.MACHINE_ID_machine) FROM MACHINE a INNER JOIN `TRACE` b ON a.ID_MACHINE = b.MACHINE_ID_machine WHERE b.date_file BETWEEN '2020-10-01' and '2020-10-02' AND b.trace_status = 'OK' GROUP BY b.date_file, a.machine_type
希望以上解决方法对您有所帮助。