У меня есть приложение для регистрации пособий, и мне нужно извлечь самую последнюю историческую запись за данный год и сравнить ее с самой последней исторической записью за другой данный год и определить, какие (если таковые имеются) поля изменились.
Я пробовал несколько решений (некоторые из которых были найдены здесь), которые включают в себя предложение OVER (PARTITION ...). К сожалению, моя версия SQL (2005) / Management Studio не оценила, какой это замечательный инструментпотому что, как только он проверяет мой код, он быстро завершает работу.
Так вот, что у меня есть:
SELECT * FROM
(SELECT empID, ssn, fname, minitial, lname, email, dob,
gender, wkPh, maritalStatus,
ROW_NUMBER() OVER (PARTITION BY empID ORDER BY lastUpdate DESC)
AS ranking
FROM empHistory WHERE (benYr = 2011))
T WHERE ranking=1
Я не дошел до сравнения двух строк, так как я неКажется, что он может собирать данные даже в течение одного года.
Есть какие-нибудь идеи о том, что происходит, или альтернативные / лучшие способы получения нужных мне данных?
РЕДАКТИРОВАТЬ: работа по переустановке SSMS, нов то же время ... будет ли этот повторно созданный запрос возвращать ту же информацию? или он будет возвращать данные только в том случае, если для данного empID более одной строки?
SELECT empID, ssn, fname, minitial, lname, email, dob, gender, wkPh, maritalStatus, benYr FROM empHistory AS a WHERE (benYr = '2011') AND (lastUpdate = (SELECT MAX(lastUpdate) AS Expr1 FROM empHistory AS b WHERE (a.empID = empID)))
Переустановил SSMS безрезультатно.
Однако я выполнял запрос из таблицы и обнаружил, что когда я запускаю запрос, начиная новый запрос, он работает нормально - это ожидаемый результат?