我有一张每周在周一加载员工记录的表。加载日期存储在记录中。我需要将总变化(添加/更新)记录从一周到下一个总和。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