在日期之间选择第一个值

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子句

以上是关于在日期之间选择第一个值的主要内容,如果未能解决你的问题,请参考以下文章

选择 MIN 日期之后的第一个日期

无法在momentjs中选择minDate

选择 2 个日期之间的记录平均值 SQL Netezza

获取下拉框第一个选项的值最后一个选项的值第二个选项的值

SQL Server 2008 仅在月份和年份之间选择数据

选择两个日期之间的 Pandas 数据框行