값이 변경됐을 때의 시점 찾기 0 3 742

by 뚜두뚜두 [SQLServer] [2018.08.18 14:33:30]


DATE SCORE
2018-08-10 A
2018-08-11 A
2018-08-12 B
2018-08-13 B
2018-08-14 A

 

값이 A->B로 바뀌었을때의 최초 시점인 2018-08-11의 날짜를 찾고 싶은데요,, mssql을 사용하고 있습니다!

TOP1을 이용해서 찾으려고 하는데 전혀 감이 안옵니다 GROUP BY를 해야할지 어떻게 해야하는지 도움 부탁드립니다

 

by 야신 [2018.08.18 15:24:54]
SELECT MAX(DT)
FROM (
SELECT '2018-08-10' DT, 'A' AS C2  UNION ALL
SELECT '2018-08-11', 'A'  UNION ALL
SELECT '2018-08-12', 'B'  UNION ALL
SELECT '2018-08-13', 'B'  UNION ALL
SELECT '2018-08-14', 'A'
)
WHERE C2 = 'A'
AND DT <  (SELECT  MIN(DT)
             FROM (
                    SELECT '2018-08-10' DT, 'A' AS C2  UNION ALL
                    SELECT '2018-08-11', 'A'  UNION ALL
                    SELECT '2018-08-12', 'B'  UNION ALL
                    SELECT '2018-08-13', 'B'  UNION ALL
                    SELECT '2018-08-14', 'A'
                   )
            WHERE C2 = 'B'
           )

 


by 뚜두뚜두 [2018.08.19 13:43:01]

where 조건이 고정값이 아니어서 'A', 'B'로 검색하면 안돼서요..


by 마농 [2018.08.20 09:01:55]
WITH t AS
(
SELECT '2018-08-10' dt, 'A' cd
UNION ALL SELECT '2018-08-11', 'A'
UNION ALL SELECT '2018-08-12', 'B'
UNION ALL SELECT '2018-08-13', 'B'
UNION ALL SELECT '2018-08-14', 'A'
)
SELECT MIN(dt) sdt
     , MAX(dt) edt
     , cd
  FROM (SELECT dt, cd
             , ROW_NUMBER() OVER(ORDER BY dt)
             - ROW_NUMBER() OVER(PARTITION BY cd ORDER BY dt) grp
          FROM t
        ) a
 GROUP BY cd, grp
 ORDER BY sdt
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입