带有where子句的SQL窗口函数

时间:2014-02-25 00:28:09

标签: sql teradata window-functions

我正在使用teradata。 我有一个包含两个日期列和产品代码的表。 像这样

Prod ID     StartDate       EndDate
123         1-1-2013        1-5-2013
123         1-3-2013        1-10-2013
123         1-4-2013        1-10-2013
321         1-4-2013        1-10-2013
321         1-6-2013        1-12-2013
321         1-5-2013        1-12-2013

我需要编写一个查询,它会为我提供同一产品的下一个“结束日期”的最短开始日期。所以在上面的例子中,第一个产品将返回'1-3-2013',而对于第二个产品我会收到'1-5-2013'因为下一个结束日期'1-12-2013是重复的,并且我只需要获得它的“开始日期”的最小实例。

我感觉它像是

min(startDate) over (partition by prodID order by endDate rows between 1 following and 1 following)

但是,我觉得我需要一个限定语句,这将确保下一行的startDate大于当前行的endDate。

1 个答案:

答案 0 :(得分:2)

以下行的最小end_date应为

min(startDate) 
over (partition by prodID 
order by endDate
rows between 1 following and unbounded following)

也许您需要将startDate添加到ORDER BY。

下一行的startDate大于当前行的endDate:

qualify
   min(startDate) 
   over (partition by prodID 
   order by endDate
   rows between 1 following and 1 following) > endDate