计算您退出汽车的次数

时间:2016-07-26 23:10:53

标签: sql sql-server sql-server-2008

我有一个问题,即时通讯项目GPS, 当路上的汽车在我们的数据库中保存一个值= 1,但是当这个离开路径时,在我们的数据库中保存一个值= 0,那么如何确定从SQL查询中路由的次数?

这是我们表格的一个例子:

Example table with datas

然后,如果你看图片,价值1车在路上,0车在路线,我想计算价值组,例如我的结果将是:

离开路线= 2(次)

3 个答案:

答案 0 :(得分:1)

有几种方法可以做到这一点。根据您的数据库,可能会有一个更简单的window functions版本,例如leadlag。但是,这应该是exists

的通用
select count(y1.id) 
from yourtable y1 
where y1.value = 0 and exists (
    select 1 
    from yourtable y2 
    where y2.id = y1.id - 1 and y2.value = 1)

答案 1 :(得分:0)

;with cteBase as (
    Select *,RowNr = Row_Number() over (Order by ID) From YourTable
)
Select A.* 
 From  cteBase A
 Join  cteBase B on (A.RowNr=B.RowNr+1 and A.Value=0 and B.Value=1)

返回

ID  Value   RowNr
4   0       4
6   0       6

我不想假设ID是增量的,所以我使用了Row_Number()。如果增量@sgeddes也能正常工作

答案 2 :(得分:0)

如果你需要的只是路由的Value为1,而路由为0的次数,请尝试以下查询:

select 
sum(Value) as [On_route],
sum(abs(Value-1)) as [Off_Route] 
from GPSTable

abs(Value-1)基本上是0到1和1到0,这很容易检查,