sql - 事件发生时识别日期范围的 T-SQL 查询

标签 sql tsql sql-server-2012

当组织在我们的“监控”列表中时,我试图确定日期范围。

我的数据如下所示:

OrgCode OrgName           ReviewDate    MonitorList
8000    Organization A    3/6/2014      1
8000    Organization A    6/4/2014      1
8000    Organization A    9/4/2014      1
8000    Organization A    12/4/2014     0
8000    Organization A    3/5/2015      1
8000    Organization A    6/4/2015      1
8000    Organization A    9/16/2015     1
8000    Organization A    12/16/2015    1
8000    Organization A    3/9/2016      1
8000    Organization A    6/2/2016      1
8000    Organization A    9/8/2016      1
8000    Organization A    12/8/2016     1
8000    Organization A    3/9/2017      0
8000    Organization A    6/14/2018     0

我正在寻找的查询输出如下所示:
OrgCode OrgName           MonitorStartDate  MonitorEndDate
8000    Organization A    3/6/2014          12/4/2014
8000    Organization A    3/5/2015          3/9/2017

这个组织,即组织 A,已经两次出现在我们的监控列表中:从 3/6/2014 到 12/4/2014,以及 3/5/2015 到 3/9/2017。

我试图通过几种方式来实现这一点,包括,
  • 品种LEAD()LAG() ;和,
  • GROUP BY OrgCode, OrgName, MonitorList并将 MonitorStartDate 定义为 MIN(ReviewDate)和 MonitorEndDate 为 MAX(ReviewDate) .

  • 第二种方法没有考虑到这些组织可能多次出现在监视列表中/不在监视列表中的事实。我还是觉得LEAD()的一些组合或 LAG()可能会起作用;但是,不是他们自己。

    你们可以提供的任何指导都会很棒,感谢您的帮助!

    最佳答案

    0 时,使用运行总和将行分类到重新设置值的组中。遇到和lead获取下一行的日期,因为结束日期必须从遇到的第一个 0 开始。然后使用 minmax在具有必要分组的相应列上。

    select orgcode,orgname
    ,min(case when monitorlist=1 then reviewdate end) as monitorstartdate
    ,max(next_dt) as monitorenddate
    from (select t.*,
          sum(case when monitorlist=0 then 1 else 0 end) over(partition by orgcode order by reviewdate) as grp,
          lead(reviewdate) over(partition by orgcode order by reviewdate) as next_dt
          from tbl t
         ) t
    group by orgcode,orgname,grp
    having max(cast(monitorlist as int))=1
    

    关于sql - 事件发生时识别日期范围的 T-SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50490788/

    相关文章:

    sql - 按行获取多个指标的总和

    sql - 如何快速比较多个字符串?

    java - SQL Server "Application=Intent"不工作 JDBC

    sql - 尝试将 SQL Server 2008 (SP2) 升级到 SQL Server 2012 时出错 : There was a failure to calculate the applicability of setting LICENSEPATH

    mysql - 选择两个用户通信之间的最新消息并将其分组

    Jquery 点击刷新

    c# - SQL 查询找不到以 č、ć、š、ž 等开头的城市

    sql - SQL Server 每年的第一个星期一

    sql-server - SQL Server 引用计算列

    sql-server - 如何删除字符串列上的空格