按多个条件在表中获取唯一值

时间:2016-10-10 12:00:48

标签: sql

我的表是:

表1

ID     Payment_type       Time
A           X           2014 01
A           Y           2014 08
B           X           2013 10
A           Y           2014 08
B           Z           2013 09
A           Y           2012 01
A           Z           2014 08

结果应该是

ID     Payment_type     
A           Y           
B           X    

要求首先要查看ID的最长时间。如果只有1个观察值,则获取付款类型的相应值。如果ID的最长时间超过1行,请获取最多发生的付款类型(如果是平局,则选择任何值)。

1 个答案:

答案 0 :(得分:2)

要解决此问题,您需要每次都记录每个值的频率:

select id, payment_type, time, count(*) as cnt
from t
group by id, payment_type, time;

接下来,您需要根据时间选择每个id的最大值,然后cnt。最简单的方法是使用row_number()

select id, payment_type, time
from (select id, payment_type, time, count(*) as cnt,
             row_number() over (partition by id order by time desc, cnt desc) as seqnum
      from t
      group by id, payment_type, time
     ) ipt
where seqnum = 1;