带筛选器的SQL最大和最小日期

带筛选器的SQL最大和最小日期,sql,sql-server,tsql,sql-server-2014,Sql,Sql Server,Tsql,Sql Server 2014,以下账户于2018年1月19日关闭,然后于2018年2月27日重新开放,然后于2018年3月26日再次关闭。如何编写sql以在该帐户打开和关闭时捕获。closerestrictind='C'是帐户关闭的时间 我们在一个数据仓库中工作,每天加载数据以捕获所有历史 对于账户1234,它应该是这样的: closed on 1/19/2018 re-opened on 2/27/2018 closed on 3/26/2018 谢谢大家! 您可以使用滞后: 您可以使用lag: 您可以执行两个selec

以下账户于2018年1月19日关闭,然后于2018年2月27日重新开放,然后于2018年3月26日再次关闭。如何编写sql以在该帐户打开和关闭时捕获。closerestrictind='C'是帐户关闭的时间

我们在一个数据仓库中工作,每天加载数据以捕获所有历史

对于账户1234,它应该是这样的:

closed on 1/19/2018
re-opened on 2/27/2018
closed on 3/26/2018
谢谢大家!

您可以使用滞后:

您可以使用lag:


您可以执行两个select语句,第一个语句按acctnbr划分行数,按日期排序。。。保存在tmp表中

第二个select,内部将该表与自身t1和t2连接起来

其中t1.closeRestrictedId='C'


和join,其中t1.rownum>t2.rownum+1

可以执行两个select语句,第一个语句按acctnbr进行行数分区,按日期排序。。。保存在tmp表中

第二个select,内部将该表与自身t1和t2连接起来

其中t1.closeRestrictedId='C'


以及t1.rownum>t2.rownum+1的连接,请添加您正在使用的SQL Server版本。以及预期的结果。如果带“C”的行表示该帐户已关闭,那么该帐户为何会多次打开?SQL 2014-同一客户端,因此,如果客户决定回来,我们会重复使用相同的帐号。Google Gaps and Islands问题,您会发现许多解决此常见问题的示例。开放日期和到期日期列是否有隐藏的含义?例如,在关闭的过期日期结束之前发生打开请求?请添加您正在使用的SQL Server版本。以及预期的结果。如果带“C”的行表示该帐户已关闭,那么该帐户为何会多次打开?SQL 2014-同一客户端,因此,如果客户决定回来,我们会重复使用相同的帐号。Google Gaps and Islands问题,您会发现许多解决此常见问题的示例。开放日期和到期日期列是否有隐藏的含义?例如,在关闭的到期日期结束之前发生打开请求?谢谢!这太棒了!我必须开始更多地使用这个滞后函数。谢谢!这太棒了!我必须开始更多地使用这个滞后函数。
select acctnbr, effectivedate,
       (case when closerestrictedind = 'C' then 'closed' else 'opened' end) as action
from (select t.*, lag(closerestrictedind) over (partition by acctnbr order by effectivedate) as prev_cr
      from t
     ) t
where prev_cr <> closerestrictedind;