У меня есть база данных торговых записей SQL Server 2008 R2 для нескольких опционов на акции, каждая с интервалом в одну минуту, и каждая минута содержит записи на несколько истечений.Например,
Symbol, TradeDate, Expiry, Open, High, Low, Close
AMZN, 4/01/2009 9:31:00, 4/17/2009, 8, 10, 9, 8.5
AMZN, 4/01/2009 9:31:00, 5/17/2009, 10, 11, 10, 11
AMZN, 4/01/2009 9:31:00, 6/18/2009, 12,13,12,12
GOOG, 4/01/2009 9:31:00, 4/17/2009, 8, 9, 7, 7.5
AMZN, 4/01/2009 9:32:00, 4/17/2009, 8.2, 8.9, 8.3, 8.5
AMZN, 4/01/2009 9:32:00, 5/16/2009, 3, 4, 4, 4
...
AMZN, 4/20/2009 9:31:00, 5/16/2009, 8.5, 9, 8.75, 8.75
AMZN, 4/20/2009 9:31:00, 6/18/2009, 9, 10, 9, 9.2
В опциях всегда есть понятие контракта на первый месяц.Для этой проблемы определите контракт основного месяца следующим образом: Если есть записи TradeDate, меньшие, чем дата истечения для этого контракта, то есть первый месяц.Иначе, передний месяц - это контракт на следующие месяцы.Так, например, в приведенных выше данных, 4/01/2009, месяцем AMZN является контракт, срок действия которого истекает 17/04/2009.Однако, когда мы переходим к TradeDate от 20.04.2009, основным месяцем является контракт от 16.05.2009, поскольку в выходные дни истек срок действия контракта 17.04.2007.
Что такое оператор SQL, которыйвсегда возвращать все правильные строки, дающие «контракт на первый месяц», основанный на том, что такое TradeDate?