我的数据库包含交易日期和到期日。我想获得给定日期的第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
。还有更好的方法吗?
答案 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
但是,没有性能提升(查询计划将是相同的)。