首页 > 解决方案 > SQL查询基于其他列的最大值

问题描述

我想要每个预订中的最高排名以及随着时间的推移的特许经营权。关于如何查询这个的任何想法?

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

输出应该像...但请注意,我也希望不返回多个记录,例如 578 用于 17 年 6 月 2 日的预订 1 和特许经营 2。

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

标签: sqlteradata

解决方案


你可以使用QUALIFY

SELECT *
FROM tab
QUALIFY RANK() OVER(PARTITION BY reservation,date,franch ORDER BY rank DESC) = 1

推荐阅读