繁体   English   中英

合并来自同一表的2个MYSQL计数查询

[英]Combine 2 MYSQL count queries from same table

我正在尝试创建一个查询,该查询将为我提供在指定时间范围内按周分组的打开和关闭的票证数量。 有人对我如何实现这一目标有想法吗?

如果我将时间参考从T1.closed改为T1.opened我将为一列而不是另一列获得正确的分组。

以下是我到目前为止所拥有的。

SELECT 
FROM_DAYS(TO_DAYS(T1.created) -MOD(TO_DAYS(T1.created) -1, 7)) as week,
COUNT(T1.created) as Opened, COUNT(T2.ticket) as Closed

FROM issues as T1
LEFT JOIN issues T2 on T1.ticket = T2.ticket AND T1.closed 
BETWEEN (DATE_SUB(CURDATE(), INTERVAL 2 MONTH)) 
AND (DATE_SUB(CURDATE(), INTERVAL 1 MONTH)) AND T1.closed IS NOT NULL

WHERE
T1.created > (DATE_SUB(CURDATE(), INTERVAL 2 MONTH))
AND
T1.created < (DATE_SUB(CURDATE(), INTERVAL 1 MONTH))

GROUP BY
week

据我了解,t1.opened和t1.closed是日期,因此您可以使用:

select `week`, sum(`opened`), sum(`closed`) from
(
    select week(t1.opened) as `week`, count(*) as `opened`, 0 as `closed`
    from issues as t1
    where t1.opened is not null AND ##FILTER BY OPENED##
    group by week(t1.opened)
union all
    select week(t2.closed) as `week`, 0 as `opened`, count(*) as `closed`
    from issues as t2
    where t2.closed is not null AND ##FILTER BY CLOSED##
    group by week(t2.closed)
) as t3
group by `week`

注意:您会发现有2个查询,请不要加入它们,因为可能有几周没有关闭/打开的问题

注意2:如果您要按创建日期添加过滤器-您需要考虑过滤器的工作方式,例如问题是在1月1日创建,1月8日打开,1月15日关闭创建的,则应产生以下每个范围:1-7 ,2-8、9-16?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM