Pregunta

Tengo una situación como esta:

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

Necesito hacer lo siguiente:

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

El resultado debería ser este:

ItemA $550
ItemB $150

Entonces, las fechas efectivas para los precios pueden variar desde hace 5 años hasta 5 años a partir de ahora. Quiero seleccionar el precio que sea efectivo hoy o en el pasado (¡no en el futuro! Aún no es efectivo). Tiene que ser el " más reciente " precio efectivo.

¿Alguna idea?

¿Fue útil?

Solución

Algo como esto (no tiene sus nombres, pero se entiende) ...

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

Otros consejos

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: cambió la consulta para que realmente funcione, suponiendo que el precio no cambie más de una vez al día.

No sé la respuesta en la parte superior de mi cabeza, pero supongo que quieres decir que necesitas usar una subconsulta, lo que podría hacer que sea una consulta muy costosa.

Puede ser más fácil extraer todos los datos en un código de uso para procesarlos usted mismo.

debería funcionar si lo haces

SELECT ItemName, MAX(ItemPriceEffectiveDate)
FROM FunTable
WHERE ItemPriceEffectiveDate < getDate()
GROUP BY ItemName
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top