2016-07-26 14 views
-1

Ich habe eine Frage, ich bin auf ein Projekt GPS, Wenn ein Auto unterwegs in unserer Datenbank einen Wert = 1 speichern, aber wenn diese Route gehen in unserer Datenbank einen Wert speichern = 0, also wie kann ich feststellen, wie oft eine SQL-Anfrage nicht eingehalten wurde? Zählen Sie, wie oft Sie die Route verlassen das Auto

Dies ist ein Beispiel für unsere Tabelle:

Example table with datas

Dann, wenn Sie das Bild aussehen, Wert-1-Auto auf der Strecke ist und 0 Auto Route abgekommen, i die Wert Gruppen zählen will, zum Beispiel mein Ergebnis wird sein:

der Route = 2 (mal)

+1

Bitte markieren Sie Ihre Frage mit der richtigen Datenbank. – sgeddes

+0

Sql Server 2008 –

Antwort

1

Es gibt mehrere Möglichkeiten, dies zu tun. Abhängig von Ihrer Datenbank kann es eine einfachere Version mit window functions wie lead und lag geben. Dies sollte jedoch mit exists generisch sein:

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 - leider unterstützt 2008 nicht 'Lead' oder' Lag', also ist dies wahrscheinlich die beste Option ... – 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) 

Returns

ID Value RowNr 
4 0  4 
6 0  6 

Ich wollte nicht die ID zu übernehmen war inkrementelle so habe ich Row_Number(). Wenn inkrementeller @sgeddes funktioniert genauso gut

0

Wenn das, was Sie brauchen, ist nur die Anzahl der Male Value 1 wie auf der Route und 0 als Off-Route, versuchen Sie die folgende Abfrage:

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

abs(Value-1) im Wesentlichen coverts 0 zu 1 und 1 zu 0, das ist einfach genug zu überprüfen,