在日期之间选择第一个值
Posted
技术标签:
【中文标题】在日期之间选择第一个值【英文标题】:Selecting First value when between to dates 【发布时间】:2018-02-02 19:24:36 【问题描述】:我有下表:当该日期在 StartDate 和 EndDate 之间时,我需要捕获第一个服务日期,下面是我的语法。
表A
ServiceDate StartDate EndDate ID PROGRAM
11/25/15 12/14/15 12/17/15 1 HIGH
12/14/15 12/14/15 12/17/15 1 HIGH
1/20/16 12/14/15 12/14/15 1 HIGH
输出:
StartDate EndDate ID PROGRAM FIRST_SERVICE_DT
12/14/15 12/17/15 1 HIGH 12/14/15
sql
SELECT *, CASE WHEN SERVICEDATE NOT BETWEEN STARTDATE AND ENDDATE THEN NULL
WHEN SERVICEDATE BETWEEN STARTDATE AND ENDDATE THEN FIRST_VALUE(TRUNC(SERVICEDATE)) OVER (PARTITION BY ID ORDER BY SERVICEDATE)
ID ORDER BY SERVICEDATE)
END FIRST_SERVICE_DT
我的查询产生了不正确的结果,需要做什么才能获得我想要的输出?
【问题讨论】:
只需要servicedate在startdate和enddate之间的记录,丢弃剩余的记录? 【参考方案1】:您可以使用min
窗口函数来做到这一点。
select *
from (select t.*
,min(case when service_date between start_date and end_date then service_date end) over(partition by id) as first_service_date
from tbl t
) t
where service_date=first_service_date
【讨论】:
此语法抛出错误。 min(start_date 和 end_date 之间的 service_date 然后 service_date 的情况) over(按 id 分区)作为 first_service_date aah..我错过了end
case
表达式。编辑它。现在应该可以工作了。
知道了,在Then
之后添加End
子句以上是关于在日期之间选择第一个值的主要内容,如果未能解决你的问题,请参考以下文章