У меня есть таблица, которая содержит:
- идентификатор финансового инструмента
- цена
- дата, когда была зарегистрирована цена
- фактическое время, когда была зарегистрирована цена
-источник цены
Я хочу получить идентификатор индекса, последнюю цену, источник цены и дату этой последней цены для каждого инструмента, где источником является "L" или "R". Я предпочитаю источник от «L» до «R», но последняя цена более важна (поэтому, если у самой последней даты цены есть только источник «R» - возьмите это, но если для самой последней даты у нас обоих, возьмите «L» «).
Это SQL у меня есть:
SELECT tab1.IndexID, tab1.QuoteDate, tab2.Source, tab2.ActualTime FROM
(SELECT IndexID, Max(QuoteDate) as QuoteDate FROM PricesTable GROUP BY IndexID) tab1
JOIN
(SELECT IndexID, Min(Source) AS Source, Max(UpdatedTime) AS ActualTime, QuoteDate FROM PricesTable WHERE Source IN ('L','R') GROUP BY IndexID, QuoteDate) tab2
ON tab1.IndexID = tab2.IndexID AND tab1.QuoteDate = tab2.QuoteDate
Однако я также хочу извлечь поле цены, но не могу получить его из-за предложения GROUP BY. Я не могу извлечь цену без включения цены ни в GROUP BY, ни в агрегатную функцию.
Вместо этого мне пришлось присоединить приведенный выше код SQL к другому куску SQL, который просто получает цены и идентификаторы индекса и присоединяется к идентификатору индекса.
Есть ли более быстрый способ выполнить этот запрос?
РЕДАКТИРОВАТЬ: спасибо за ответы до сих пор. Можно ли получить какой-нибудь совет, который более эффективен с точки зрения производительности?
Спасибо