我必须为我的系统上要求的门票报告。
从工作站调用票证,该工作站与许多区域相关。
SELECT
DATE(q.created_at) AS DATE,
HOUR(q.created_at) AS HOUR,
ar.name AS area,
w.name AS workstation,
COUNT(DISTINCT q.id) AS count
FROM qms_queue q
JOIN qms_workstations w ON q.workstation_id = w.id
JOIN qms_area_workstation aw ON aw.workstation_id = w.id
JOIN qms_areas ar ON aw.area_id = ar.id
WHERE q.created_at
BETWEEN '2018-02-26 00:00:00'
AND '2018-02-28 23:59:59'
AND customer_id = 1
GROUP BY DATE(q.created_at), w.id, HOUR(q.created_at)
ORDER BY DATE(q.created_at), HOUR(q.created_at)
执行该查询,我得到了门票的总数。
SELECT
DATE(q.created_at) AS DATE,
HOUR(q.created_at) AS HOUR,
ar.name AS area,
w.name AS workstation,
COUNT(DISTINCT q.id) AS count
FROM qms_queue q
JOIN qms_workstations w ON q.workstation_id = w.id
JOIN qms_area_workstation aw ON aw.workstation_id = w.id
JOIN qms_areas ar ON aw.area_id = ar.id
WHERE q.created_at
BETWEEN '2018-02-26 00:00:00'
AND '2018-02-28 23:59:59'
AND customer_id = 1
GROUP BY DATE(q.created_at), w.id, HOUR(q.created_at), ar.id
ORDER BY DATE(q.created_at), HOUR(q.created_at)
但是,执行该查询会获得每个区域的绝对总数。
我无法找出计算每个区域的部分计数的方法。
有人可以帮我解决这个问题吗?
答案 0 :(得分:0)
如果没有看到实际数据,请考虑简单地运行不同的聚合,一个位于 Area 级别,另一个位于 Workstation 级别,而不是两者。如果需要,可以通过 Date 和 Hour 连接两者作为派生表子查询:
区域级别
SELECT
DATE(q.created_at) AS `DATE`,
HOUR(q.created_at) AS `HOUR`,
ar.name AS `area`,
COUNT(DISTINCT q.id) AS `area_count`
...
GROUP BY DATE(q.created_at), HOUR(q.created_at), ar.name
ORDER BY DATE(q.created_at), HOUR(q.created_at)
工作站级别
SELECT
DATE(q.created_at) AS `DATE`,
HOUR(q.created_at) AS `HOUR`,
w.name AS `workstation`,
COUNT(DISTINCT q.id) AS `ws_count`
...
GROUP BY DATE(q.created_at), HOUR(q.created_at), w.name
ORDER BY DATE(q.created_at), HOUR(q.created_at)
答案 1 :(得分:-1)
您好我没有您的数据设置,但尝试分析功能
COUNT(q.id) OVER (PARTITION BY ar.name)
检查这是否可以为每个区域提供计数。