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

时间:2020-10-05 12:32:55

标签: mysql 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

它可以正常工作,但显示的是整个日期范围内的数据,而不是日期范围内每天的数据,有人可以告诉我如何分割日期并在指定的日期范围内对每一天进行计数,谢谢大家

1 个答案:

答案 0 :(得分:1)

请尝试以下操作:

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

当然,您可以更改日期和machine_type的顺序。这将为您提供不同的分组,并带有领先的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

假设一台个人计算机每天可能有多个错误,并且您想要按表TRACE中记录的计算机类型对所有这些错误进行计数,则需要像这样更改查询:

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