根据Teradata SQL中另一列的最大值查找列的计数

时间:2018-06-11 19:22:44

标签: sql teradata

我的表A包含三列:DatesA_IDB_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

3 个答案:

答案 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;