obtener - compró una película antes que Gladiator date SQL SERVER
obtener el nombre del dia en sql server (3)
Necesitaba orientación y ayuda con una pregunta que nunca hice en SQL SERVER.
Tengo esta información:
Cust_Nr Date FilmName
157649306 20150430 Inside Llewyn Davis
158470722 20150504 Nick Cave: 20,000 Days On Earth
158467945 20150504 Out Of The Furnace
158470531 20150504 FilmA
157649306 20150510 Gladiator
158470722 20150515 Gladiator
El número de cliente: 158470722
ha comprado dos películas, 1 ):Inside Llewyn Davis
y 2) Gladiator
en diferentes fechas. Lo que trato de hacer en SQL SERVER es esto:
Cust_Nr Date FilmName Before Gladiator Purchase
157649306 20150430 Inside Llewyn Davis 1
158470722 20150504 Nick Cave: 20,000 Days On Earth 1
158467945 20150504 Out Of The Furnace 0
158470531 20150504 FilmA 0
157649306 20150510 Gladiator 0
158470722 20150515 Gladiator 0
Si miramos las fechas para el cliente nr: 157649306
, compró una película en una fecha, 20150430, y compró Gladiator en el 20150510. ¿Cómo puedo crear una columna como la de arriba para mostrar si un cliente ha comprado una película en una fecha anterior a la fecha del gladiador?
Necesitas la agregación y los detalles en la misma consulta, así que utiliza una función agregada en ventana:
case
when Date < min(case when FilmName = ''Gladiator'' then Date end)
over (partition by Cust_Nr)
then 1
else 0
end
Puede hacer esto con agregación condicional y funcionalidad de ventana / analítica:
SELECT *,CASE WHEN [Date] < MIN(CASE WHEN FilmName = ''Gladiator''
THEN [Date]
END) OVER(PARTITION BY Cust_Nr)
THEN 1
ELSE 0
END AS Before_Gladiator
FROM Table1
Demostración: SQL Fiddle
Podrías unirte a la mesa con una consulta sobre la película de gladiadores:
SELECT t.*,
CASE WHEN g_date IS NULL OR t.[date] > g_date THEN 1 ELSE 0 END
FROM mytable t
LEFT JOIN (SELECT [date] AS g_date, Cust_Nr
FROM mytable
WHERE FileName = ''Gladiator'') g ON t.Cust_Nr = g.Cust_Nr