Tengo algunos datos en una tabla que se parece a esto:consulta iterativa sin utilizar CTE
Item Date Price A 8/29/2012 $3 B 8/29/2012 $23 C 8/29/2012 $10 A 8/30/2012 $4 B 8/30/2012 $25 C 8/30/2012 $11 A 8/31/2012 $3 B 8/31/2012 $22 C 8/31/2012 $8 A 9/01/2012 $3 B 9/01/2012 $26 C 9/01/2012 $9 A 9/02/2012 $3 B 9/02/2012 $24 C 9/02/2012 $9
Tengo que escribir una consulta que identifica a ese precio por A no ha cambiado desde el 30/08/2012, el precio del artículo C no ha cambiado desde el 9/01/2012, y para devolver el número de días transcurridos para ambos (estamos buscando los artículos con precios sin movimiento). No puedo usar CTE o cursores, o tablas temporales de creadas por separado (seleccionar en, etc.) debido a las limitaciones de la herramienta de informe web en la que este sql necesita ejecutarse. Solo puedo usar una selección de paso único 'básico' consulta (aunque las subconsultas funcionarán). ¿Alguien tiene alguna idea astuta sobre cómo lograr esto?
Mi primer intento fue agrupar por artículo y el precio, donde el precio es el mismo que el último precio , having count > 2
, identificando la fecha min y haciendo un datediff entre la fecha min y getdate. Sin embargo, esto solo identifica la primera instancia de ese precio, no tiene en cuenta ninguna fila subsiguiente que pueda tener un precio diferente de . Espero que tenga sentido.
que DBMS estás usando? PostgreSQL? ¿Oráculo? DB2? –
Por cierto: siempre puede escribir una vista que devuelva la información necesaria y luego hacer un SELECTO desde esa vista desde su herramienta de informes –
Lo siento, debería haber dicho, este es SQL Server 2008. Lamentablemente, tampoco puedo escribir una vista - ¡Esta es una base de datos alojada por un proveedor y tenemos derechos de solo lectura para ella! – Luke