SQL比较同一表中的记录版本
我有一个表,每周星期一加载员工记录。加载日期存储在记录上。我需要计算从一周到下一周的总更改(添加/更新)记录数 这就是我目前所拥有的。它将最新加载日期的新记录和更新记录计数与前一加载日期进行比较 我不确定这是否是一个好的方法,我真的很感激能得到任何关于我的方法的反馈,或者关于实现我目标的更好方法的建议 谢谢SQL比较同一表中的记录版本,sql,sql-server,Sql,Sql Server,我有一个表,每周星期一加载员工记录。加载日期存储在记录上。我需要计算从一周到下一周的总更改(添加/更新)记录数 这就是我目前所拥有的。它将最新加载日期的新记录和更新记录计数与前一加载日期进行比较 我不确定这是否是一个好的方法,我真的很感激能得到任何关于我的方法的反馈,或者关于实现我目标的更好方法的建议 谢谢 SELECT RIGHT(CONVERT(VARCHAR(10), REPORT_DATE, 103), 7) AS REPORT_DATE, [NEW],
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;
我有几个建议可以简化您的代码,甚至提高查询的性能
如果您有一个性能很差的复杂SQL,请原谅我重复我的观点。为了以后提高性能而修改SQL的风险更大。谢谢你的建议。将MAX(Load_Date)值放在一个变量中并使用它而不是使用MAX两次是否有意义?这将比原始版本更好。在最坏的情况下,确保在“加载日期”上有一个索引。除此之外,这是一个获取我需要的信息的好方法吗?