Синтаксис SQL & # 8212; Группировать по & # 8230; Пользовательская совокупная функциональность?

StackOverflow https://stackoverflow.com/questions/1035494

Вопрос

У меня такая ситуация:

Таблица: FunTable

ItemKey     ItemName     ItemPriceEffectiveDate    ItemPrice
11          ItemA        6/6/2009                  $500
12          ItemA        6/15/2009                 $550
13          ItemA        9/9/2009                  $450
14          ItemB        3/9/2009                  $150
15          ItemB        9/9/2009                  $350

Мне нужно сделать следующее:

Select
  ItemName as ItemDescription,
  (SELECT THE PRICE WITH THE LATEST EFFECTIVE DATE FROM TODAY THROUGH THE PAST)
FROM
  FunTable
GROUP BY
  ItemName

Результат должен быть следующим:

ItemA $550
ItemB $150

Таким образом, даты вступления в силу цен могут варьироваться от 5 до 5 лет. Я хочу выбрать цену, которая будет эффективной либо сегодня, либо в прошлом (не в будущем! Пока не действует). Это должно быть «самым последним» эффективная цена.

Есть мысли?

Это было полезно?

Решение

Примерно так (не называйте своих имен, но вы поняли) ...

WITH A (Row, Price) AS
(
  SELECT Row_Number() OVER (PARTITION BY Item ORDER BY Effective DESC) AS [RN],
         Price FROM Table2
  WHERE Effective <= GETDATE()
)
SELECT * FROM A WHERE A.Row = 1

Другие советы

select ft.ItemName,
       price
from   (select   ItemName,
                 Max(ItemPriceEffectiveDate) as MaxEff
        from     FunTable
        where    ItemPriceEffectiveDate <= GETDATE()
        group by ItemName) as d,
       FunTable as ft
where  d.MaxEff = ft.ItemPriceEffectiveDate; 

Изменить. Изменен запрос на фактическую работу, при условии, что цена меняется не чаще одного раза в день.

Я не знаю ответа от головы до головы, но я предполагаю, что вы имеете в виду необходимость использовать подзапрос, что может сделать его очень дорогим запросом.

Может быть проще извлечь все данные в коде использования для последующей обработки самостоятельно.

должен работать, если вы делаете

SELECT ItemName, MAX(ItemPriceEffectiveDate)
FROM FunTable
WHERE ItemPriceEffectiveDate < getDate()
GROUP BY ItemName
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top