我有一個查詢,當給定一個特定的日期時,檢查一個大的數據集(大約36米和增長)並返回一個聚合。一切都按預期工作......但是,我的最終目標是能夠確定這些值的年平均值。也許我的大腦空着,但我試圖動態地做到這一點,我不必運行查詢365次,然後平均.....SQL:來自同一個查詢的聯合多個單行結果集
我需要找到年平均365結果,每 @ inst,每 @程序。
任何指針在正確的方向將不勝感激。
查詢:
USE HCODS
GO
DECLARE @user_date DATETIME
DECLARE @inst VARCHAR(4)
DECLARE @program VARCHAR(4)
SELECT @user_date = '9/30/2016'
SELECT @inst = 'SAC'
SELECT @program = 'PSU';
WITH T AS (
SELECT
B.OFFENDERID
,Institution = I.ORGCOMMONID
,BedUse = B.BEDUSE
,BeginEffectiveDtTm = CAST(B.BEDASSIGNMENTDATE AS DATETIME) + CAST(B.BEDASSIGNMENTTIME AS DATETIME)
,EndEffectiveDtTm = CASE WHEN B.BEDASSIGNMENTSTATUS = 'U' THEN
(CAST(B.INMBEDSTATUSDATE AS DATETIME) + CAST(B.INMBEDSTATUSTIME AS DATETIME)) ELSE NULL END
FROM ODS.BEDASSIGNMENT (NOLOCK) B
INNER JOIN (
SELECT F.PARTYID, I.ORGCOMMONID
FROM ODS.ORGANIZATIONPROF (NOLOCK) AS F
INNER JOIN ODS.ORGANIZATIONPROF (NOLOCK) AS I ON F.ORGAREACODE = I.PARTYID
) AS I ON B.FACILITYWHEREBEDLOCATED = I.PARTYID
WHERE B.BEDASSIGNMENTDATE BETWEEN '1/1/2016' AND '12/31/2016'
AND B.BEDASSIGNMENTSTATUS IN ('U','M')
)
SELECT CAST(@user_date AS DATE)
,T.INSTITUTION
,T.BEDUSE
,COUNT(*)
FROM T
WHERE
(
(
T.BEGINEFFECTIVEDTTM <= DATEADD(second,-1,(@user_date+1))
AND
T.ENDEFFECTIVEDTTM >= @user_date
)
OR T.ENDEFFECTIVEDTTM IS NULL
)
AND T.INSTITUTION = @inst
AND T.BedUse = @program
GROUP BY
T.Institution
,T.BedUse
結果集(由查詢的單個運行獲得各一個)
Date |Institution |BedUse |Count
-----------|------------|-------|-------
2016-09-30 |SAC |PSU |446
2016-10-01 |SAC |PSU |421
2016-10-02 |SAC |PSU |423
etc......
您能否提供一個執行此查詢的結果集示例,以及您希望生成的示例? – Pops
顯示查詢本身也會很好。 –
當然可以!剛剛添加。 – nicbjones