【发布时间】:2014-05-11 14:38:41
【问题描述】:
我使用的是 SQL Server 2012。我有一个非常大的数据库,其中包含超过 4000 万条用于邮件传递的 GPS 轨迹记录。我希望能够弄清楚一个邮递员被拦截了多长时间。所以,当运营商的距离注册为0,并且每连续跟随0,我想知道累计停留的时间。我还希望在注册任何高于 0 时停止求和,并在注册 0 时重新开始。这是我到目前为止所得到的:
SELECT
CASE
WHEN Distance = 0 THEN SUM(Time_s) OVER (ORDER BY [ID] ROWS UNBOUNDED PRECEDING)
WHEN Distance <0 THEN NULL
END as StopTime
FROM data
ORDER BY ID
这是结果:
ID Distance Time_s StopTime
1 6 899 NULL
2 0 789 1688
3 16 740 NULL
4 0 70 2498
5 0 50 2548
6 0 585 3133
7 0 10 3143
8 5 329 NULL
9 6 394 NULL
10 0 570 4436
我显然不是在每次连续的零被大于零的任何东西打断时都告诉查询重新开始计数。这是我想要的结果:
ID Distance Time_s StopTime
1 6 899 NULL
2 0 789 789
3 16 740 NULL
4 0 70 70
5 0 50 130
6 0 585 715
7 0 10 725
8 5 329 NULL
9 6 394 NULL
10 0 570 570
【问题讨论】:
标签: sql sql-server tsql sql-server-2012 cumulative-sum