week una obtener nombre mes fecha day datepart convert año sql select sql-server-2012 row rank

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