2015-01-16 5 views
1

SQLSERVER 2012 :SQL 시간별 데이터 계산

SQL 쿼리는 시간이 0-23에 시작하는 24 시간 데이터를 반환합니다. 검색어는 예를 들어 '1-1-2014'및 1-2-2014 '와 같이 기간을 선택하면 보고서에서 오전 9 시부 터 다음 날 오전 8 시까 지 데이터를 가져와야합니다.

검색어는 우리가 선택한 기간을 계산해야하지만, 오전 9 시부 터 다음 날/오전/오전 8 시까 지 선택해야합니다. 내가 가진

테이블 구조/열은 DB에 있습니다 ReadingDate 시간 : 0-23 데이터 1 데이터 2 데이터 3

출력 내가 하나를 가져올 수 있어요

Date |  Hours|   Data 1|  Data 2|  Data 3 

sSelect = "Select P.ReadingDate,P.Hour,P.Data1,P.Data2,P.Data3 FROM Operations P WHERE P.ReadingDate = '" & startdate & "' AND P.Hour Between 9 AND 23 Group by P.ReadingDate,P.Hour,P.Data1,P.Data2,P.Data3 
Union 
Select P.ReadingDate,P.Hour,P.Data1,P.Data2,P.Data3 FROM Operations P WHERE P.ReadingDate = '" & Enddate & " ' AND P.Hour Between 0 And 8 group by P.ReadingDate,P.Hour,P.Data1,P.Data2,P.Data3 " 

2015-1-15 12:00 AM|  9| 1900|2000|300 
2015-1-15 12:00 AM|  10| 
2015-1-15 12:00 AM|  11| 
2015-1-15 12:00 AM|  12| 
2015-1-15 12:00 AM|  13| 
2015-1-15 12:00 AM|  14| 
2015-1-15 12:00 AM|  15| 
2015-1-15 12:00 AM|  16| 
2015-1-15 12:00 AM|  17| 
2015-1-15 12:00 AM|  18| 
2015-1-15 12:00 AM|  19| 
2015-1-15 12:00 AM|  20| 
2015-1-15 12:00 AM|  21| 
2015-1-15 12:00 AM|  22| 
2015-1-15 12:00 AM|  23| 
2015-1-16 12:00 AM|  0| 
2015-1-16 12:00 AM|  1| 
2015-1-16 12:00 AM|  2| 
2015-1-16 12:00 AM|  3| 
2015-1-16 12:00 AM|  4| 
2015-1-16 12:00 AM|  5| 
2015-1-16 12:00 AM|  6| 
2015-1-16 12:00 AM|  7| 
2015-1-16 12:00 AM|  8| 

'1-1-2015'및 '1-2-2015'기간의 데이터를 '12 월 1 일 ~2014 월 '에서 12 월 31 일 ~2014 일 사이에 선택하면 해당 데이터가 제공되지 않습니다. 전체 데이터 및 그것은 다시 날 1 일 데이터를 가져옵니다.

+0

를? (날짜/시간/간격 처리가 ANSI SQL 표준에 따라 너무 자주 수행되지는 않습니다.) – jarlh

답변

0

이 염두에 SQL 서버로 구성되어 있습니다 DBMS

DECLARE @BeginDate datetime = '2014-01-01';  --List only as a starting date; do not include the time 
DECLARE @EndDate datetime = '2014-01-02';  --List only as a end date; do not include the time; should not be the same as @BeginDate; 
               --Could change this to expect the same date, but will need to add a full day to @EndDate below in addition to hour 
SET @BeginDate = DATEADD(HOUR, 9, @BeginDate); --Sets the starting time at 9:00 AM per business rules 
SET @EndDate = DATEADD(HOUR, 8, @EndDate);  --Sets the ending time at 8:00 AM per business rules 

SELECT 
    YourTable.ReadingDate, 
    YourTable.Hours, 
    YourTable.Data1, 
    YourTable.Data2, 
    YourTable.Data3 
FROM 
    YourTable 
WHERE 
    DATEADD(HOUR, YourTable.Hours, YourTable.ReadingDate) BETWEEN @BeginDate AND @EndDate; 
+0

Richard, 질의 해 주셔서 감사합니다. 나는 노력했고 그것은 같은 것으로서 일했다. 다시 한번 감사드립니다. – tedstrich

+0

SSRS에서 BeginDate 및 EndDate에 대한 매개 변수 값을 어떻게 설정합니까? 이 보고서는 SSRS를 사용하여 생성됩니다. 내가 쿼리를 실행하면 SQL은 그저 작동하는 파일입니다. 하지만 SSRS에 통합하려고하면 저를 버립니다. – tedstrich

+0

저장 프로 시저를 사용하지 않고 SSRS에이 SQL을 직접 입력하는 경우 WHERE 절 (BETWEEN 후)에 시간 (4 및 5 줄)을 추가 한 다음 매개 변수 섹션 아래의 보고서 작성기에 매개 변수를 추가하고 해당 매개 변수 섹션이 데이터 집합 속성에 추가되었습니다. –