繁体   English   中英

SQL Server视图返回具有特定值的连续行

[英]SQL Server View to Return Consecutive rows with a Specific Value

考虑来自TestTable的以下数据:

在此处输入图片说明

我需要一个能够提供IsAssist为true的最新开始StatusDate的视图。 例如,IsAssist为true的最新StatusDate是2014-05-25。 由于之前的记录也是IsAssist = true,因此我需要在计算中包括这些记录。 因此,“ IsAssist Block”的开头是2014-05-22。 这是我需要的日期。

我该如何写一个可以提供这种效果的视图?

这应该给你一个好的开始

  Select s.tableid, s.StatusDate, e,TableId, e.StatusDate
  from testable s -- for start
      left join testable e -- for end
          on e.statusdate = 
               (Select Min(StatusDate)
                From TestTable
                Where StatusDate > s.StatusDate
                    and isAssist = 1
                    and Not exists
                        (Select * From testable
                         Where StatusDate Betweens.StatusDate and e.StatusDate
                             and isAssist = 0))
  Where s.IsAssist = 1
select *
from TestTable
where StatusDate 
between

/* the low date */

(
select min(StatusDate)
from TestTable s3

/* grab oldest entry which is <= than the high date*/



where StatusDate <= (select max(StatusDate) from TestTable s where IsAssist = 1)
and IsAssist = 1

/* but has no later isAssist = 0 rows */
and not exists 
(select 1
from TestTable s4
where s4.StatusDate > s3.StatusDate
and IsAssist = 0
)
)

和/ *高日期* /(从TestTable的IsAssist = 1处选择max(StatusDate))和

好的-我在JL Peyret的回应下设法解决了这个问题。 我必须反转之间语句的参数(MS何时执行此操作?是否一直这样?)。

它的作用是通过获取IsAssist = 0的StatusDate并小于IsAssist = 1的最大StatusDate来确定低日期。高日期就是IsAssist = 1的最大StatusDate。

在这两个日期之间检查IsAssist = 1,然后检查是否有IsAssist = 1的最新记录。

我意识到这还没有完成。 我必须考虑低日期计算可能失败的可能性,因为没有任何记录,其中IsAssist =0。详细信息...

JL非常亲密,应该为我走上正确的道路而值得称赞。 谢谢!

select * 
from TestTablewhere StatusDate 
between
/* the low date */
(select max(StatusDate)
from TestTable
Where IsAssist = 0
and StatusDate < (select max(StatusDate) from TestTable s where IsAssist = 1))
and
/* the high date */
(select max(StatusDate) from TestTable s where IsAssist = 1)
and IsAssist = 1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM