我有一个问题,即时通讯项目GPS, 当路上的汽车在我们的数据库中保存一个值= 1,但是当这个离开路径时,在我们的数据库中保存一个值= 0,那么如何确定从SQL查询中路由的次数?
这是我们表格的一个例子:
然后,如果你看图片,价值1车在路上,0车在路线,我想计算价值组,例如我的结果将是:
离开路线= 2(次)
答案 0 :(得分:1)
有几种方法可以做到这一点。根据您的数据库,可能会有一个更简单的window functions
版本,例如lead
和lag
。但是,这应该是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,这很容易检查,