0

私のデータベースには、取引日と有効期限が含まれています。特定の日付の 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

しかし、トリプルネスティングを使用せずにそれを行うことはできますか? 基本的にMAX、 、TOPおよびを使用する必要がありDISTINCTます。より良い方法はありますか?

4

1 に答える 1

1

2つのインナーを組み合わせることができます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

ただし、パフォーマンスは向上しません (クエリ プランは同じになります)。

于 2013-07-10T14:27:42.967 に答える