Pergunta

Eu tenho uma situação como esta:

Tabela: 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

Eu preciso fazer o seguinte:

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

A saída deve ser a seguinte:

ItemA $550
ItemB $150

Portanto, as datas eficazes para preços podem variar de 5 anos a 5 anos daqui a. Quero selecionar o preço efetivo hoje ou no passado (não no futuro! Ainda não é eficaz). Tem que ser o preço efetivo "mais recente".

Alguma ideia?

Foi útil?

Solução

Algo assim (não tem seus nomes, mas você entendeu) ...

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

Outras dicas

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; 

Editar: mudou a consulta para realmente funcionar, assumindo que o preço não mude mais de uma vez por dia.

Não sei a resposta no topo da minha cabeça, mas meu palpite é que você quer dizer precisar usar uma sub-quadra, o que pode torná-la uma consulta muito cara.

Pode ser mais fácil puxar todos os dados em um código de uso para pós-processá-los.

deve trabalhar se você fizer

SELECT ItemName, MAX(ItemPriceEffectiveDate)
FROM FunTable
WHERE ItemPriceEffectiveDate < getDate()
GROUP BY ItemName
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top