2014-09-12 2 views
0

와이 데이터를 연속 행을 반환합니다 : SQL 서버보기 TestTable에서 고려에게 특정 값

enter image description here

나는 IsAssist 사실입니다 가장 최근의 시작 StatusDate를 제공하는보기가 필요합니다. 예를 들어, IsAssist가 true 인 가장 최근 StatusDate는 2014-05-25입니다. 바로 이전 레코드도 IsAssist = true이므로 계산에 포함시켜야합니다. 그래서 "IsAssist Block"의 시작은 2014-05-22입니다. 필요한 날짜입니다.

어떻게 제공 할 수 있습니까?

답변

0

좋아 - 나는 JL Peyret의 도움으로이 사실을 알 수 있었다. 나는 between 문에 대한 매개 변수를 되돌려 야했습니다 (MS가 언제 이것을 했습니까? 항상이 방법을 사용 했습니까?). 그것은 무엇을

는 StatusDate IsAssist = 0을 얻어서 낮은 날짜를 확인하고 IsAssist = 1. 높은 날짜가 단순히 최대 StatusDate입니다 최대 StatusDate보다 작은 경우 IsAssist = 1

확인 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 
0

이 당신에게 좋은 시작

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 
+0

찰스 입력에 감사드립니다. 이것은 나에게 도로를 약간 내려보고에 대한 몇 가지 아이디어를 제공합니다. –

0
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 에서 최대 (StatusDate)) 및

+0

감사합니다., JL. 이것은 내가 필요한 것에 아주 가깝다. 당신은 저에게 일할 쿼리를 시작했습니다. BTW -이 특정 쿼리는 최대 날짜가 between 문에서 첫 번째 매개 변수이기 때문에 예상 결과를 반환하지 않습니다. 그 사이에 낮은 날짜부터 시작해야하며, 그 다음에 높은 날짜가 있어야합니다. 여기에 제공된 내용에 매우 근접한 나의 대답이 아래에 게시되어 있습니다. –

+0

예, 지금 변경했습니다. 나는 SQLFiddle을하려고했지만 그 사이트는 스키마를 빌드하고 싶지 않았다. 지금은 정상으로 돌아왔다. 특히 isAssist = 1이 없거나 기준에 맞는 이전 행이없는 등 경계 조건 및 테스트 시나리오를 구체적으로 테스트 할 것을 권장합니다. 이제 약간의 더미 행을 넣고 동작을 확인하십시오.이 종류의 항목에 대한 쿼리 조정은 대개 사소하지만 문제를 인식해야합니다. –