pug*_*ugu 6 t-sql sql-server schedule
我的表格是多天和频道的预定电视节目列表.
SELECT * FROM [Scheduled_Programmes]
Channel Date Time Title
1 2012-09-19 06:00 Family Guy
2 2012-09-19 06:01 CSI Miami
3 2012-09-19 06:20 News
1 2012-09-19 06:30 Heroes
2 2012-09-19 07:01 Spiderman
3 2012-09-19 06:40 Batman
1 2012-09-19 07:30 Micky Mouse
2 2012-09-19 07:31 CSI New York
3 2012-09-19 07:10 Friends
1 2012-09-19 07:55 The Wire
2 2012-09-19 08:00 Dodgeball
3 2012-09-19 07:35 Gossip Girl
Run Code Online (Sandbox Code Playgroud)
我想要创建的结果集是什么在现在和什么在下一个.
Let's assume the current datetime is (D/M/Y HH:MM) 19/09/2012 07:15
Run Code Online (Sandbox Code Playgroud)
所以类似于:
Channel 1 Channel 2 Channel 3
NOW Heroes Spiderman Friends
NEXT Micky Mous CSI New York Gossip Girl
Run Code Online (Sandbox Code Playgroud)
我一直在绞尽脑汁寻找最佳方法,而无需为每个频道硬编码单独的查询.我觉得我现在已经过时了,所以如果有人能指出我正确的方向,那将会很棒.
谢谢
PS:如果它有所作为我在Microsoft SQL Server 2012上
这看起来确实像是你可以让你的 GIU 格式和旋转的东西,但这是我的尝试。
SELECT * FROM (
SELECT * FROM (
SELECT X.Status, X.Channel, X.Title FROM (
SELECT 'NOW' as Status, Channel, Title, RANK() OVER (PARTITION BY Channel ORDER BY Time DESC) RANKED FROM Sceduled_Programs SP
WHERE DateTime <= '7:15') X
WHERE X.RANKED = 1
) A
UNION ALL
SELECT * FROM (
SELECT Y.Status, Y.Channel, Y.Title FROM (
SELECT 'NEXT' as Status, Channel, Title, RANK() OVER (PARTITION BY Channel ORDER BY Time ASC) RANKED FROM Sceduled_Programs SP
WHERE DateTime > '7:15') Y
WHERE Y.RANKED = 1
) B
) DataToPivot
PIVOT (MAX(Title) FOR Channel IN ([1], [2], [3])) AS PivotTable
Run Code Online (Sandbox Code Playgroud)
编辑:我在这里只使用时间,但只添加日期。您确实应该考虑合并日期和时间列。
Edit2:要添加日期,只需替换与此比较的时间。甚至应该超越日期界限。
WHERE CAST(Date AS DATETIME) + CAST(Time AS DATETIME) > '19/09/2012 07:15'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
358 次 |
最近记录: |