我有一張每週在週一加載員工記錄的表。加載日期存儲在記錄中。我需要將總變化(添加/更新)記錄從一週到下一個總和。SQL比較同一表中的記錄版本
這是我到目前爲止。它將最新載入日期的新記錄和更新記錄計數與前一載入日期進行比較。
我不確定這是否是一個很好的方法來做到這一點,我真的很感激任何反饋,我可以得到關於我的方法,或建議更好的方式來實現我的目標。
感謝。
SELECT
RIGHT(CONVERT(VARCHAR(10), REPORT_DATE, 103), 7) AS REPORT_DATE,
[NEW],
[UPDATED]
FROM
(
SELECT
CUR.LOAD_DATE AS REPORT_DATE,
CASE
WHEN PRV.LOAD_DATE IS NULL THEN 'NEW'
ELSE 'UPDATED'
END AS RECORD_TYPE,
COUNT(*) AS RECORD_COUNT
FROM
(SELECT *
FROM EMPLOYEES
WHERE LOAD_DATE = (SELECT MAX(LOAD_DATE) FROM EMPLOYEES)) CUR
LEFT OUTER JOIN
(SELECT *
FROM EMPLOYEES
WHERE LOAD_DATE = (SELECT DATEADD(WEEK,-1,MAX(LOAD_DATE)) FROM EMPLOYEES))PRV
ON
CUR.EMPLOYEE_ID = PRV.EMPLOYEE_ID
WHERE
PRV.EMPLOYEE_ID IS NULL
OR (CUR.FIRST_NAME != PRV.FIRST_NAME
OR CUR.LAST_NAME != PRV.LAST_NAME
OR CUR.ADDRESS1 != PRV.ADDRESS1
OR CUR.ADDRESS2 != PRV.ADDRESS2
OR CUR.CITY != PRV.CITY
OR CUR.STATE != PRV.STATE
OR CUR.ZIP != PRV.ZIP
OR CUR.POSITION != PRV.POSITION
OR CUR.LOCATION != PRV.LOCATION)
GROUP BY
CUR.LOAD_DATE,
PRV.LOAD_DATE
) DT
PIVOT
(SUM(RECORD_COUNT) FOR RECORD_TYPE IN ([NEW], [UPDATED])) PV;
謝謝Mike的建議。把MAX(Load_Date)的值放在一個變量中並用它代替兩次使用MAX是否合理? – WilliamB2 2012-03-14 04:27:38
這會比你的原始版本更好。在最壞的情況下,請確保「load_date」上有索引。 – 2012-03-14 05:33:35
除此之外,這是一個體面的方法來獲取我需要的信息嗎? – WilliamB2 2012-03-14 10:59:08