我有一张表,其中记录着SQL Server 2008R2中的守卫巡逻。
每当值班开始时,都会创建一个新的警报编号,并在此警报编号内巡逻并启动一个时间。
如果执行了至少一次巡逻,则每12个小时我们将收取固定费用。如果在相同的警报编号下超过了12小时范围,则必须另外支付固定费用。
12小时的计算从第一次巡逻开始。
我尝试了一个临时表,但到目前为止无法解决。
DECLARE @t1 TABLE (
AlertNo INT,
Starttime SMALLDATETIME,
Endtime SMALLDATETIME
)
INSERT INTO @t1 (AlertNo, Starttime, Endtime)
SELECT AlertNo,
Starttimepatrol,
DATEADD(HOUR, 12, Starttimepatrol)
FROM tblAllPatrols
WHERE PatrolNo = 1
SELECT AlertNo,
(
SELECT COUNT(*)
FROM [tblAllPatrols] a
INNER JOIN @t1 b ON b.AlertNo = a.AlertNo
WHERE a.Starttimepatrol BETWEEN b.Starttime AND b.Endtime
) AS patrols
FROM [vwAlleDatensaetze]
GROUP BY AlertNo
Run Code Online (Sandbox Code Playgroud)
我知道这还不是故事的结局,但由于我什至无法计算巡逻的次数,因此无法找到解决问题的方法。
它应该以某种方式在每个警报编号的12小时范围内对巡逻进行“分组”,然后计算在同一警报编号下存在多少组。
希望你们中的某人可以带领我实现我需要的结果。
谢谢迈克尔的帮助
sql-server ×1