Как я могу получить следующую информацию о запасах из SQL? - PullRequest
1 голос
/ 26 мая 2011

Предположим, у меня есть следующие столбцы таблицы

  • ДАТА
  • ВРЕМЯ
  • БЕЗОПАСНОСТЬ
  • TRADEPRICE

Для каждой даты я хочу получить первую и последнюю торговую цену для каждой ценной бумаги, которая торгуется в эту конкретную дату.Как я могу сделать это в SQL?

Ответы [ 2 ]

1 голос
/ 26 мая 2011

Функции работы с окнами в Postgresql дают несколько способов получить то, что вы хотите. Я не использовал их достаточно, чтобы знать, какой (если есть) из небольших вариантов лучше всего оптимизирован, но одна версия -

SELECT dt, sec, t0, p0, t1, p1 FROM
(
SELECT dt, sec,  first_value(tm) over date_window as t0,
  first_value(price) OVER date_window AS p0,
  last_value(tm) OVER date_window AS t1,
  last_value(price) OVER date_window AS p1,
  rank() OVER date_window AS r
 FROM a
 WINDOW date_window AS (PARTITION BY dt, sec ORDER BY tm
  RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
) AS subquery
WHERE r=1;

Я изменил имена полей, чтобы избежать зарезервированных слов.

0 голосов
/ 26 мая 2011

1001 * попробовать *

   Select Coalesce(f.Security, l.Security) security.
      Coalesce(f.Date, l.Date) Date,
      f.TradePrice firstPrice,
      l.TradePrice lastPrice
   From table f Full Join table l
      On f.Security = l.Security
         And f.Date = l.Date
         And f.time = (Select Min(Time)
                       From table
                       Where Security = f.security 
                          And Date = f.Date)
         And l.Time = (Select Max(Time)
                       From table
                       Where Security = l.security 
                          And Date = l.Date)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...