2016-07-26 12 views
-1

私はプロジェクトのGPS、 に質問があります私たちのデータベースに値を格納すると、値は1ですが、 = 0、どのように私はSQLクエリからルートの外の回数を決定することができますか?あなたが何回車を出る回数をカウントするか

これが私たちのテーブルの例である:

Example table with datas

あなたは写真を見ればその後、値1車がルート上にあり、0車がルートから外れている、私は例えば、値のグループをカウントしたいです私の結果は次のようになります。

ルート= 2(回)

+1

あなたの質問に正しいデータベースを付けてください。 – sgeddes

+0

Sql Server 2008 –

答えて

1

オフこれを行うには、いくつかの方法があります。データベースによっては、leadlagなど、より簡単なバージョンのwindow functionsがあるかもしれません。しかし、これは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) 
+0

Sql Server 2008 –

+1

@IsmaelRenteria - 残念ながら2008年は 'lead'または' lag'をサポートしていないので、これはおそらく最善のオプションです... – sgeddes

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 

私はROW_NUMBER()を使用してIDが増分したと仮定したくありませんでした。増分@sgeddesは、同じようにうまく動作している場合

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にチェックするのが簡単です

関連する問題