我正在使用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 :(得分: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