我正在查询具有支持SQL92的OLEDB接口的数据系统。我的查询问题等同于此处解决的问题:SQL Query to find earliest date dependent on column value changing, 但是在那里提供的解决方案以及下面复制的解决方案对于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兼容版本是什么样的?
答案 0 :(得分: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