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 6628 게시물 읽기
No. 6628
[질문] 시간별 데이터의 차이 값 구하기 쿼리
작성자
임시
작성일
2013-02-04 16:38
조회수
8,601

1.  테이블 구조
 
날짜                      |          시간             |       data
 
13.01.01                    01:00:00                            1
13:01.01                    01:30:00                            2
13.01.01                    01:40:00                            1
13:01.01                    02:10:00                            2
13:01.01                    02:30:00                            2
13:01.01                    02:40:00                            3
 
 
2. 예상 조회 결과
   - 1차 조회 (각 시간별 시작값과 종료값 조회)
     01:00:00  |   1    (시작시간)
     01:40:00  |   1    (종료시간)
     02:10:00  |   2    (시작시간)
     02:40:00  |   3    (종료시간)
   - 2차 조회 (해당 시간의 종료시간에서 시작시간의 뺄셈)
     01 시 기준으로 data = 0 (1-1)
     02 시 기준으로 data = 1 (3-2)
 
위와 같은 2차 결과가 나오게 하고 싶습니다. 일별, 월별도 가능할지도 알려주시면 감사하겠습니다.

이 글에 대한 댓글이 총 1건 있습니다.

보기로 주어진 날짜가 어떤 경우에는 마침표(.)로 구분되고 어떤 경우에는 콜론(:)으로 구별되는 것을 그냥 마이너스(-)로 구별되어 있다고 가정했음.
 
 
-- 1차 조회용
SELECT 
--rngBgn AS [기준], 
evtDt
--, evtKind
, ll.data
FROM(
SELECT DATEADD(HOUR,DATEDIFF( HOUR, 0,CAST( '20' + 날짜 + ' ' + 시간 AS datetime ) ),0) AS rngBgn,
MIN( CAST( '20' + 날짜 + ' ' + 시간 AS datetime ) ) AS minDt,
MAX( CAST( '20' + 날짜 + ' ' + 시간 AS datetime ) ) AS maxDt
FROM tbl
GROUP BY DATEADD(HOUR,DATEDIFF( HOUR, 0,CAST( '20' + 날짜 + ' ' + 시간 AS datetime ) ),0)
) AS kk
UNPIVOT ( evtDt FOR evtKind IN ([minDT], [maxDT])) AS uu
INNER JOIN tbl AS ll ON uu.evtDt = CAST( '20' + ll.날짜 + ' ' + ll.시간 AS datetime )
ORDER BY evtDt
;

 

-- 2차 조회용

SELECT kk.rngBgn AS 기준, maxData.data - minData.data AS [2차 조회]

FROM(
SELECT DATEADD(HOUR,DATEDIFF( HOUR, 0,CAST( '20' + 날짜 + ' ' + 시간 AS datetime ) ),0) AS rngBgn,
MIN( CAST( '20' + 날짜 + ' ' + 시간 AS datetime ) ) AS minDt,
MAX( CAST( '20' + 날짜 + ' ' + 시간 AS datetime ) ) AS maxDt
FROM tbl
GROUP BY DATEADD(HOUR,DATEDIFF( HOUR, 0,CAST( '20' + 날짜 + ' ' + 시간 AS datetime ) ),0)
) AS kk
INNER JOIN tbl AS minData ON kk.minDt = CAST( '20' + minData.날짜 + ' ' + minData.시간 AS datetime )
INNER JOIN tbl AS maxData ON kk.maxDt = CAST( '20' + maxData.날짜 + ' ' + maxData.시간 AS datetime )
 
ORDER BY kk.rngBgn
;
 
우욱님이 2013-02-04 18:22에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
6631MS-SQL2000서버 DB를 Client에서 백업하기 [18]
김우성
2013-02-17
11576
6630[Q] 무조건 디폴트값만 [2]
김면수
2013-02-13
7303
6629연속된 테이블에서 Join의 기준 테이블 [1]
sdlkjf
2013-02-09
8944
6628[질문] 시간별 데이터의 차이 값 구하기 쿼리 [1]
임시
2013-02-04
8601
6627시간별 통계 쿼리 [1]
totosairo
2013-02-01
11340
6626특정 Table Lock?
강재순
2013-01-31
7490
6625갑자기 where 조건이 적용 되지 않습니다. [4]
정명학
2013-01-30
7888
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.050초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다