选择第N个最近的日期

时间:2013-07-10 13:27:09

标签: sql-server sql-server-2008-r2 distinct max

我的数据库包含交易日期和到期日。我想获得给定日期的第N个下一个到期日期。此查询工作正常:

SELECT MAX(Expiry)
FROM   (SELECT TOP(@N) Expiry
        FROM   (SELECT DISTINCT Expiry
                FROM MTM
                WHERE TradeDate = @Date
                  and Code = @Code
                  and Class = 'blablablabla') as D
        ORDER BY Expiry) as T

但是我可以不使用三重嵌套吗?基本上我需要使用MAXTOPDISTINCT。还有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

两个内部可以组合成SELECT DISTINCT TOP

SELECT MAX(Expiry)
FROM   (SELECT DISTINCT TOP(@N) Expiry
        FROM MTM
        WHERE TradeDate = @Date
          and Code = @Code
          and Class = 'blablablabla'
        ORDER BY Expiry) as T

但是,没有性能提升(查询计划将是相同的)。