我的表A包含三列:Dates
,A_ID
和B_ID
。每个日期有多个A_ID
,每个A_ID
包含多个B_ID
。
Dates A_ID B_ID
4/5/2018 01245 DEF
4/5/2018 12345 ABC
4/6/2018 42345 WER
4/7/2018 52345 ABC
4/7/2018 67700 XCV
首先,我想显示Distinct_Date
,只显示一个日期。其次,我想要为每个日期计算总计B_ID
,但由于B_ID
可以是多个A_ID
,我想根据MAX
的{{1}}来计算。
例如,A_ID
4/5/2018
上的B_ID
是一个(DEF),4/6/2018
是一个(WER),4/7/2018
上的A_ID
52345
大于4/5/2018
中的那个,所以我只计算4/7/2018
B_ID
' s ABC
。并将B_ID
XCV
计为该日期的另一个计数。所以结果如下表所示。
Distinct_Dates Count_B_ID
4/5/2018 1
4/6/2018 1
4/7/2018 2
答案 0 :(得分:2)
获取每个b_id的最大日期并在日期汇总。为避免错过日期,请在计算后的所有不同日期左加入。
select d.date,coalesce(cnt,0)
from (select distinct date from tbl) d
left join (select dt,count(distinct b_id) as cnt
from (select b_id,max(date) as dt
from tbl
group by b_id
) t
group by dt
) t on t.dt=d.date
答案 1 :(得分:1)
SELECT Dates, Count(*)
FROM
(
SELECT Dates, A_ID, B_ID
FROM tab
QUALIFY
Row_Number() -- return the row with the higest A_ID for each B_ID,
Over(PARTITION BY B_ID
ORDER BY A_ID DESC) = 1
) AS dt
GROUP BY 1
答案 2 :(得分:0)
我认为你需要两个group by
:
select Distinct_Dates, count(*) as Count_B_ID
from (select b_id, max(dates) as Distinct_Dates
from table
group by b_id
) tt
group by Distinct_Dates;