database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 7239 게시물 읽기
No. 7239
중복되는 시간을 제거(포함) 하고 시작시간과 종료시간을 구하고 싶습니다. 쿼리 도움좀 부탁드려요.
작성자
박인규
작성일
2021-08-27 18:48ⓒ
2021-08-27 18:56ⓜ
조회수
145

중복되는 시간을 제거(포함) 하고 시작시간과 종료시간을 구하고 싶습니다. 쿼리 도움좀 부탁드려요.


며칠째 해매고 있다보니, 조언을 구하고 싶어 문의드립니다.



시작시간순으로 정렬된 데이타 중에 시간이 연속된 시간으로 그룹을 묶어 해당 그룹의 최초 시작시간과 최종 종료시간을

구하려고 하는데 쿼리로 가능할지 모르겠습니다.



데이터


일자                 단말기번호         시작시간          종료시간

2021-08-27        AA                     08:01             08:30                    


2021-08-27        AA                     08:40             09:00                      

2021-08-27        BB                      08:50             08:55                      --위에 포함된 시간


2021-08-27        AA                     09:10             09:30

2021-08-27        BB                      09:25             09:40

2021-08-27        CC                      09:35             09:50

2021-08-27        AA                      09:37             10:00



조회되기를 원하는 데이터


일자                NO          시작시간          종료시간

2021-08-27       1            08:01             08:30

2021-08-27       2            08:40             09:00

2021-08-27       3            09:10             10:00


 

이 글에 대한 댓글이 총 1건 있습니다.
WITH t AS
(
SELECT '2021-08-27' dt, '08:01' stm, '08:30' etm
UNION ALL SELECT '2021-08-27', '08:40', '09:00'
UNION ALL SELECT '2021-08-27', '08:50', '08:55'
UNION ALL SELECT '2021-08-27', '09:10', '09:30'
UNION ALL SELECT '2021-08-27', '09:25', '09:40'
UNION ALL SELECT '2021-08-27', '09:35', '09:50'
UNION ALL SELECT '2021-08-27', '09:37', '10:00'
)
SELECT dt
     , no
     , MIN(stm) stm
     , MAX(etm) etm
  FROM (SELECT dt, stm, etm
             , SUM(flag) OVER(PARTITION BY dt ORDER BY stm, etm) no
          FROM (SELECT dt, stm, etm
                     , CASE WHEN MAX(etm) OVER(
                       PARTITION BY dt ORDER BY stm, etm
                       ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING)
                       >= stm THEN 0 ELSE 1 END flag
                  FROM t
                ) a
        ) a
 GROUP BY dt, no
;
마농(manon94)님이 2021-08-30 09:20에 작성한 댓글입니다.
이 댓글은 2021-08-30 09:24에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
7240오라클  트리거 를 MSSQL 전환 문의 드립니다.
김병훈
2021-10-01
41
7239중복되는 시간을 제거(포함) 하고 시작시간과 종료시간을 구하고 싶습니다. 쿼리 도움좀 부탁드려요. [1]
박인규
2021-08-27
145
7238쿼리문 보완좀 부탁드립니다. [2]
홍길동
2021-08-25
163
7237쿼리결과에 없는 데이터도 표시되게 하고 싶어요 [2]
바보온달
2021-08-20
123
7236mssql query 질문 [1]
질문쟁이
2021-07-20
234
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2021 DSN, All rights reserved.
작업시간: 0.011초, 이곳 서비스는
	PostgreSQL v13.3으로 자료를 관리합니다