问题描述
我正在尝试使用以下数据编写查询。我的挑战是每一天,我需要计算 Col A 中出现“105”和 Col B 中出现“100”的次数。我不需要计算每个实例“105”出现,而是每分钟“105”出现。同样与 Col B 和“100”
Date Time A B
1/20/2021 1:06:12 AM 105 100
1/20/2021 1:06:16 AM 105 100
1/20/2021 1:06:20 AM 105 100
1/20/2021 2:28:12 AM 105 100
1/20/2021 2:28:16 AM 105 100
1/20/2021 2:28:20 AM 105 100
1/20/2021 3:50:08 AM 105 10
1/20/2021 3:50:12 AM 105 10
1/20/2021 3:50:16 AM 105 10
1/20/2021 5:12:04 AM 105 10
1/20/2021 5:12:08 AM 105 10
1/20/2021 5:12:12 AM 105 10
详情:
Time A B
1:06 1 1
2:28 1 1
3:50 1 0
5:12 1 0
查询结果:
Date A B
1/21/20 4 2
任何有关如何执行此操作的建议将不胜感激。
解决方法
一种方法是在每一列上分别使用 distinct
。然后聚合:
select date,sum(a),sum(b)
from (select distinct date,hour(time) as hh,minute(time) as mm,1 as a,0 as b
from t
where a = 105
union all
select distinct date,0 as a,1 as b
from t
where b = 100
) t
group by date;