SQL-92查询以查找取决于列值更改的最早日期

时间:2010-03-01 20:00:48

标签: sql sql-server tsql ansi-92

我正在查询具有支持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兼容版本是什么样的?

1 个答案:

答案 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