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

问题描述:

我想创建一个查询,该查询会给我打开的票数#&按指定的时间周期分组。有没有人有关于我如何完成这一任务的想法?结合来自同一个表的2个MYSQL计数查询

如果我从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 
+0

使用'CASE'语句的SUM。它会完全否定完全加入的需要。 “COUNT”真的不是你在这里需要的。我发现'COUNT'很少是你需要的。 – Avarkx

+0

我会研究如何在这里应用。我是一个新手,但我认为SUM会在一个字段中寻找#的添加,因为这是时间被引用,我不确定这会工作。 – user3288534

据我了解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月8日关闭,1月15日关闭,应该产生以下每个范围:1-7,2-8,9-16?

+0

目标是能够在创建和关闭时引用的日期上进行筛选(这是唯一的2列)。上述工作并为我提供了一周内所有门票开放和关闭的总和#。我不得不将t1.opened更改为t1.created,因为表中的实际列被称为created。 – user3288534

+0

@ user3288534 ok,然后只需在每个子查询中添加适当的WHERE –