我的表是:
表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行,请获取最多发生的付款类型(如果是平局,则选择任何值)。
答案 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;