我想要每次预订中的最高排名以及长期的特许经营权。关于如何查询此有任何想法?
id reservation date franch rank
1 1 6/1/2017 1 234
2 1 6/1/2017 1 465
3 1 6/1/2017 1 851
4 1 6/1/2017 1 956
1 1 6/2/2017 2 658
2 1 6/2/2017 2 578
3 1 6/2/2017 2 578
4 1 6/2/2017 2 954
5 2 6/1/2017 1 436
6 2 6/1/2017 1 645
7 2 6/1/2017 1 854
8 2 6/1/2017 1 145
5 2 6/2/2017 3 98
6 2 6/2/2017 3 345
7 2 6/2/2017 3 867
8 2 6/2/2017 3 909
输出应该像...,但请注意,我也希望不返回多个记录,例如17年2月2日和专营权2的预订1的578。
id reservation date franch rank
4 1 6/1/2017 1 956
2 1 6/2/2017 2 578
3 1 6/2/2017 2 578
7 2 6/1/2017 1 854
8 2 6/2/2017 3 909
答案 0 :(得分:2)
您可以使用QUALIFY
:
SELECT *
FROM tab
QUALIFY RANK() OVER(PARTITION BY reservation,date,franch ORDER BY rank DESC) = 1
答案 1 :(得分:0)
在大多数数据库中,我可能会去:
select t.*
from t
where t.id = (select t2.id
from t t2
where t2.reservation = t.reservation and t2.date = t.date
order by t2.rank desc
fetch first 1 row only
);
但是我不认为Teradata支持这种结构。如果我假设您想要最高的ID,则:
select t.*
from t
where t.id = (select max(t2.id)
from t t2
where t2.reservation = t.reservation and t2.date = t.date
);
或者您可以使用qualify
:
select t.*
from t
qualify row_number() over (partition by reservation, date order by rank desc) = 1;
使用row_number()
可确保每reservation
/ date
排一行,因此不会重复。