1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| WITH
SR (E_LOCATION_CODE, E_ACCT_NUM, TdProdDate, E_SERVICE_TYPE, RN) AS
(
SELECT E_LOCATION_CODE,
E_ACCT_NUM,
TdProdDate,
E_SERVICE_TYPE,
row_number() over(partition BY E_ACCT_NUM, E_LOCATION_CODE ORDER BY TdProdDate ASC)
FROM dbo.TEST as a
WHERE a.TdProdDate BETWEEN '20101201' AND '20101231'
AND a.E_LOCATION_CODE = '512111'
AND a.E_SERVICE_TYPE <= 32
AND a.E_SERVICE_TYPE >= 30
)
, SR2 (a.E_LOCATION_CODE, a.E_ACCT_NUM, a.TdProdDate, a.E_SERVICE_TYPE, b.TdProdDate, b.E_SERVICE_TYPE, RN2) AS
(
SELECT
a.E_LOCATION_CODE
, a.E_ACCT_NUM
, a.TdProdDate
, a.E_SERVICE_TYPE
, b.TdProdDate
, b.E_SERVICE_TYPE
, row_number() over(partition BY a.E_ACCT_NUM, a.E_LOCATION_CODE ORDER BY b.TdProdDate ASC)
FROM SR as a
LEFT JOIN dbo.TEST as b
ON a.E_ACCT_NUM = b.E_ACCT_NUM
AND b.E_SERVICE_TYPE >= 20
AND b.E_SERVICE_TYPE <= 22
AND b.TdProdDate <= a.TdProdDate
AND b.TdProdDate >= a.TdProdDate - 11
)
--------------------------------------------------------------------------------------------------------
SELECT
a.E_LOCATION_CODE
, a.E_ACCT_NUM
, a.TdProdDate
, a.E_SERVICE_TYPE
, b.TdProdDate
, b.E_SERVICE_TYPE
FROM SR2
WHERE RN2 = 1 |
Partager