【问题标题】:SQL window function with where clause带有 where 子句的 SQL 窗口函数
【发布时间】:2014-03-26 23:08:11
【问题描述】:

我正在使用 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。

【问题讨论】:

  • 你能把你期望的输出显示为另一个表吗?

标签: sql teradata window-functions


【解决方案1】:

以下行的最短 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

【讨论】:

    猜你喜欢
    • 2017-01-15
    • 2020-11-29
    • 1970-01-01
    • 2012-03-25
    • 2012-12-09
    • 2020-09-04
    • 2015-08-17
    • 1970-01-01
    • 2012-07-03
    相关资源
    最近更新 更多