Domanda

Ho una situazione come questa:

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

Devo fare quanto segue:

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

L'output dovrebbe essere questo:

ItemA $550
ItemB $150

Pertanto, le date di validità dei prezzi possono variare da 5 anni a 5 anni. Voglio selezionare il prezzo che è efficace né oggi né in passato (non in futuro! Non è ancora efficace). Deve essere il "più recente" prezzo effettivo.

Qualche idea?

È stato utile?

Soluzione

Qualcosa del genere (non hai i tuoi nomi, ma hai l'idea) ...

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

Altri suggerimenti

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; 

Modifica: la query ha cambiato per funzionare davvero, supponendo che il prezzo non cambi più di una volta al giorno.

Non conosco la risposta dalla parte superiore della mia testa, ma la mia ipotesi è che intendi la necessità di utilizzare una query secondaria, che potrebbe renderla una query molto costosa.

Potrebbe essere più semplice estrarre tutti i dati in un codice d'uso per post-elaborarli da soli.

dovrebbe funzionare se lo fai

SELECT ItemName, MAX(ItemPriceEffectiveDate)
FROM FunTable
WHERE ItemPriceEffectiveDate < getDate()
GROUP BY ItemName
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top