我有一张桌子,可以记录用户在一天中使用滑动系统进入和离开特定房间的情况。
我正在尝试根据存储在SQL Server中的数据创建更基于视觉的报告,该报告采用以下格式:
EventTime |UserID |SubAddress|PeripheralName |EventTypeID|Serial number
08/05/2014 08:24|128 |1 |Upstairs (In) |20 |547929
08/05/2014 08:35|128 |2 |Upstairs (Out) |20 |547929
08/05/2014 08:37|128 |1 |Upstairs (In) |20 |547929
08/05/2014 09:50|128 |2 |Upstairs (Out) |20 |547929
从这里开始,理想情况下我需要创建一种方式来显示他们离开办公室的时间(以分钟为单位)。我找到了一些代码,如果我说实话,我不完全理解并且无法修改工作。
DECLARE @StartDate Datetime
DECLARE @EndDate Datetime
Declare @MinDiff int
Declare @ConsStDate datetime
Declare @ConsEndDate datetime
set @StartDate = '2010-07-02 14:02' --Start time for Report
set @EndDate = '2010-07-02 16:02' --End time for Report
set @MinDiff = Datediff(Mi,@StartDate,@EndDate) --Local use
set @ConsStDate = '2010-07-02 14:22' --Consulation start time
set @ConsEndDate = '2010-07-02 15:52' --Consulation end time
--INSERT @MyTable (Value,LogTime)
SELECT Convert(varchar,DATEADD(mi,number,@StartDate),108)
, Case When DATEADD(mi,number,@StartDate) between @ConsStDate and @ConsEndDate Then 1 else 0 End as 'With Patient'
FROM master..spt_values
where [type]='p'
and number BETWEEN 1 AND @MinDiff
如果有人做了类似的事情,我会很感激你对我今后应该做的任何帮助。
输出的所需示例(粗略地)
EventTime | Status
08/05/2014 08:24 | IN
08/05/2014 08:25 | OUT
08/05/2014 08:26 | OUT
08/05/2014 08:27 | OUT
08/05/2014 08:28 | OUT
08/05/2014 08:29 | IN
答案 0 :(得分:0)
好的,因为你每分钟需要一个记录输出,你需要一种方法来在一定间隔(@StartDate - @EndDate)之间生成每分钟的记录:
DECLARE @StartDate Datetime
DECLARE @EndDate Datetime
set @StartDate = '2010-07-02 14:02' --Start time for Report
set @EndDate = '2010-07-02 16:02' --End time for Report
select
DateAdd(MINUTE, Number, @StartDate) AS Minutes
from
(
-- This is just a fancy way to generate a list of numbers:
select row_number() over (order by t1.object_id) AS Number
from sys.all_objects t1, sys.all_objects t2
) AS Numbers
where Number <= DateDiff(MINUTE, @StartDate, @EndDate)
使用上面的代码,您将获得所选间隔之间所有分钟的列表。
现在您需要做的是将上面的输出与事件表一起加入。我不会在这里提供相应的代码,但这应该让你开始。