我有几张桌子要处理。一个是这样的:
dbo.userActivity
userID Action Time
1 25 12:00
1 10 12:01
1 12 12:35
1 6 13:54
2 10 6:47
2 42 6:48
3 8 11:54
etc.
另一个表是如下所示的时间表:
dbo.userSchedule
userID schedule_start schedule_stop
1 07:00 09:00
2 11:00 12:30
3 14:00 15:00
etc.
我需要为每一行做的dbo.userActivity
是确定每个动作是在 之前的一个小时,在和schedule_start
之间,在之后的一个小时,还是任何其他时间。schedule_start
schedule_stop
schedule_stop
所以我需要dbo.userActivity
根据时间计算在“之前”、“期间”、“之后”、“其他”的值上附加一列。
我真的不确定如何做到这一点,并希望大家能提供任何帮助。
编辑:
好的,所以我大部分时间都在工作。我刚刚看到了一些我将要处理的真实数据,并注意到活动时间是完整的日期时间戳,而活动时间表是及时的。所以我需要将日期时间转换为我可以比较的东西。
这看起来很有效:
SELECT * FROM (SELECT CONVERT(TIME, SCANDATE) as scanTime FROM appData) st WHERE st.scanTime <= '6:00' ORDER BY st.scanTime
举个例子。但是当我尝试像这样将它合并到下面的案例语句中时,它不起作用。它将相同的 THEN 应用于每一行。
SELECT CASE WHEN EXISTS ( SELECT * FROM ( SELECT CONVERT(TIME, SCANDATE) as scanTime FROM appData ) st WHERE st.scanTime <= '6:00' ) THEN 'Before 6 am' ELSE '6 am or after' END FROM appData
对此有什么进一步的想法吗?