SQL分区排名

时间:2017-11-18 21:50:29

标签: sql teradata rank partition

我试图通过ID编号获得每年的唯一许可证。我尝试过使用排名和分区,但在获取最终输出方面遇到一些麻烦,因为有些许可证在彼此之前和之后都有不同的开始和结束日期。现在的数据如下:enter image description here

理想情况下,我希望最终输出为: enter image description here

2 个答案:

答案 0 :(得分:0)

为什么交错的开始/结束日期很重要?只要您可以确定记录属于哪一年,您就可以执行以下操作:

SELECT *
FROM <Table_Name>
QUALIFY RANK() OVER(PARTITION BY ID_Number, Year ORDER BY <Some_Expression>) = 1

这将为每个(ID /年)组合创建一个分区(组),然后您可以根据需要进行处理。使用<Some_Expression>对行进行排序,以便包含要显示的数据的行在顶部排序。 RANK = 1将仅返回每组的“顶部”行。

这与您正在寻找的一致吗?

答案 1 :(得分:0)

select *
from mytable
qualify max(year) over (partiton by license)     -- example:
      - min(year) over (partiton by license)     -- 2017 - 2015 = 2
      = count(*)  over (partiton by license) - 1 -- three rows -1 = 2 
    and count(*)  over (partiton by license) > 1

超过一年,这些年是连续的。