在角斗士日期 SQL 服务器之前购买了电影
purchased a movie earlier than Gladiator date SQL SERVER
我需要指导和帮助来解决我从未在 SQL SERVER 中做过的问题。
我有这个数据:
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
客户号:158470722
购买了两部电影,1):Inside Llewyn Davis
和2)Gladiator
在不同的日期。我在 SQL SERVER 中尝试做的是:
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
如果我们查看客户 nr:157649306
的日期,他在 20150430 购买了电影,并在 20150510 购买了角斗士。我如何创建一个像上面那样的列来显示客户是否在角斗士日期之前购买了电影?
您可以使用条件聚合和 window/analytic 功能来做到这一点:
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
演示:SQL Fiddle
您需要在同一查询中进行聚合和详细信息,因此请使用窗口化聚合函数:
case
when Date < min(case when FilmName = 'Gladiator' then Date end)
over (partition by Cust_Nr)
then 1
else 0
end
您可以加入 table 并查询角斗士电影:
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
我需要指导和帮助来解决我从未在 SQL SERVER 中做过的问题。
我有这个数据:
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
客户号:158470722
购买了两部电影,1):Inside Llewyn Davis
和2)Gladiator
在不同的日期。我在 SQL SERVER 中尝试做的是:
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
如果我们查看客户 nr:157649306
的日期,他在 20150430 购买了电影,并在 20150510 购买了角斗士。我如何创建一个像上面那样的列来显示客户是否在角斗士日期之前购买了电影?
您可以使用条件聚合和 window/analytic 功能来做到这一点:
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
演示:SQL Fiddle
您需要在同一查询中进行聚合和详细信息,因此请使用窗口化聚合函数:
case
when Date < min(case when FilmName = 'Gladiator' then Date end)
over (partition by Cust_Nr)
then 1
else 0
end
您可以加入 table 并查询角斗士电影:
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