-
로그인 로그아웃 한행으로 관리 될 경우 범위조회SQL Server/Query 2013. 6. 7. 21:14
로그인과 로그아웃이 한행으로 있을 경우에 범위 검색할 때 데이터 추출하는 방법입니다.
데이터는 아래로 구성되어 있으며, 검색 조건은 10시 ~ 16시 일때.. 여기에 해당되는 데이터가 추출되는 방법입니다.
일종의 선분처리 쿼리라고 보실 수 있죠.
아래는 데이터이고, 빨간색은 결과로 반환될 데이터입니다.
9시 ~ 9시반
9시 ~ 10시
9시 ~ 13시
10시 ~ 16시
11시 ~ 14시
12시 ~ 18시
18시 ~ 20시
3시 ~ 20시
쿼리 조건은
LogoutDate > 10시보다 큰 경우면 ... 6개의 행이 리턴됩니다.
9시 ~ 13시
10시 ~ 16시
11시 ~ 14시
12시 ~ 18시
18시 ~ 20시
3시 ~ 20시
여기서 and 조건으로 LoginDate <= 16시라고 주는 경우에는..
9시 ~ 13시
10시 ~ 16시
11시 ~ 14시
12시 ~ 18시
이렇게 4개만 추출되는 방식입니다.
쿼리는 아래와 같습니다.
감사합니다. ^^
작성일: 2013-06-07
작성자: 이스트럭(강동운)
ㅁㄴ ㅇㅁㄴㅇ ㅁㄴㅇ ㅁㄴㅇIF OBJECT_ID('tblDate','U') IS NOT NULL DROP TABLE tblDate GO CREATE TABLE tblDate ( LoginDate DATETIME , LogoutDate DATETIME ) GO
INSERT INTO dbo.tblDate VALUES('2013-06-07 03:00:00','2013-06-07 20:00:00') INSERT INTO dbo.tblDate VALUES('2013-06-07 09:00:00','2013-06-07 09:30:00') INSERT INTO dbo.tblDate VALUES('2013-06-07 09:00:00','2013-06-07 10:00:00') INSERT INTO dbo.tblDate VALUES('2013-06-07 09:00:00','2013-06-07 13:00:00') INSERT INTO dbo.tblDate VALUES('2013-06-07 10:00:00','2013-06-07 16:00:00') INSERT INTO dbo.tblDate VALUES('2013-06-07 11:00:00','2013-06-07 14:00:00') INSERT INTO dbo.tblDate VALUES('2013-06-07 12:00:00','2013-06-07 18:00:00') INSERT INTO dbo.tblDate VALUES('2013-06-07 18:00:00','2013-06-07 20:00:00') GO DECLARE @StartDatetime DATETIME = '2013-06-07 10:00:00' , @EndDateTime DATETIME = '2013-06-07 16:00:00' SELECT (CASE WHEN LoginDate < @StartDatetime AND LogoutDate <= @EndDateTime THEN DATEDIFF(MI, @StartDatetime, LogoutDate) WHEN LoginDate < @StartDatetime AND LogoutDate >= @EndDateTime THEN DATEDIFF(MI, @StartDatetime, @EndDateTime) WHEN LoginDate >= @StartDatetime AND LogoutDate <= @EndDateTime THEN DATEDIFF(MI, LoginDate, LogoutDate) WHEN LoginDate >= @StartDatetime AND LogoutDate >= @EndDateTime THEN DATEDIFF(MI, LoginDate, @EndDateTime) END) , * FROM tblDate WHERE LogoutDate > @StartDatetime AND LoginDate <= @EndDateTime