SQL-92 Запрос для поиска самой ранней даты, зависящей от изменения значения столбца
Я запрашиваю систему данных с интерфейсом OLEDB, который поддерживает SQL92. Моя проблема с запросами эквивалентна той, что решена здесь: SQL-запрос для поиска самой ранней даты, зависящей от изменения значения столбца, но решение, предоставленное там и скопированное ниже, слишком сложное для SQL92:
SELECT JobCodeId, MIN(LastEffectiveDate) AS mindate
FROM (
SELECT *,
prn - rn AS diff
FROM (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY JobCodeID
ORDER BY LastEffectiveDate) AS prn,
ROW_NUMBER() OVER (ORDER BY LastEffectiveDate) AS rn
FROM @tmp
) q
) q2
GROUP BY
JobCodeId, diff
ORDER BY
mindate
Как будет выглядеть SQL92-совместимая версия этого решения?
1 ответ
Использование:
SELECT JobCodeId,
MIN(LastEffectiveDate) AS mindate
FROM (SELECT *,
prn - rn AS diff
FROM (SELECT *,
(SELECT CASE WHEN COUNT(*) = 0 THEN 1 ELSE COUNT(*) END
FROM @tmp t
WHERE t.JobCodeID = r.JobCodeID
AND t.LastEffectiveDate <= x.LastEffectiveDate) AS prn,
(SELECT COUNT(*) + 1
FROM @tmp t
WHERE t.LastEffectiveDate <= x.LastEffectiveDate) AS rn
FROM @tmp x) q
) q2
GROUP BY JobCodeId, diff
ORDER BY mindate