在一个日期范围内显示每天的SQL分组数据

13 浏览
0 Comments

在一个日期范围内显示每天的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

它可以工作,但是显示的是整个日期范围的数据,而不是指定日期范围内每天的数据。请问有人可以告诉我如何拆分日期并计算指定日期范围内每天的数量吗?非常感谢大家。

0
0 Comments

问题出现的原因是需要根据日期范围内的每一天来显示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

希望以上解决方法对您有所帮助。

0