SELECT M.TradeDate, M.Expiry, M.Future
FROM MTM as M
JOIN (SELECT TradeDate, MIN(Expiry) as Expiry
FROM MTM
WHERE Code = 'GOVI'
and Type = 'F'
GROUP BY TradeDate) as T
ON M.TradeDate = T.TradeDate and M.Expiry = T.Expiry
WHERE M.Code = 'GOVI'
and M.Type = 'F'
ORDER BY TradeDate
在这个查询中,我想提取一个 TradeDate、最近的到期日(分钟)和对应于即将到期的“未来”值。这个相应的未来意味着我现在必须有一个臃肿的嵌套查询。该查询确实可以完美运行。但我确信必须有一种更快(开发,不一定要执行)、更清晰的方式来编写它。没有嵌套查询,也没有重复完全相同的WHERE
条件。我想也许 OVER 可以提供帮助,但我不知道如何。这真的是唯一的方法吗?
SQL 通常是声明性的,但我觉得在这种我经常遇到的查询形式中,查询读起来真的不像你自己在脑海中提出的请求。