2017-06-05 2 views
1

Ich habe den Status 1 und 0 alle 10 Minuten Intervallzeit.
Wie eindeutigen Wert erhalten, wie ich nicht 1 und 0 Anzahl Wiederholung
Wenn es 1 mit Datum Zeit dann wird als nächstes 0 zeigen und dann weiter 1 zeigendistinkte Binärzahl in SQL-Server

 

    ignition status date time 
    1     2017-06-04 00:00:13.000 
    0     2017-06-04 02:36:29.000 
    1     2017-06-04 07:43:52.000 
    0     2017-06-04 23:56:18.000 
query 
select top 100 ignitionstatus,datetime from rawdata 
actual output 
ignitionstatus stringdatetime 
1    2017-05-26 17:17:50.000 
1    2017-05-26 17:18:10.000 
0    2017-05-26 17:18:30.000 
1    2017-05-26 17:18:50.000 
0    2017-05-26 17:19:30.000 
1    2017-05-26 17:19:10.000 
1    2017-05-26 17:20:10.000 
we required 
1    2017-05-26 17:17:50.000 
0    2017-05-26 17:18:30.000 
1    2017-05-26 17:18:50.000 
1    2017-05-26 17:19:10.000 
+2

So ist das, was Sie uns die * Beispieldaten * oder die * erwarteten Ergebnisse sind zeigt *? Die Frage würde sich durch * beide * merklich verbessern. –

+0

Entfernen Sie den Zeitteil von datetime. Beispiel: case (datetime_Col als DATE) –

+1

Anscheinend möchten Sie [Datensätze markieren, in denen sich der Status "Zündung" ändert (https://Stackoverflow.com/a/32172037/11683) und sie nur anzeigen. – GSerg

Antwort

1

So etwas wie das? (Taking Tabellen- und Spaltennamen aus der Abfrage in den Kommentaren versehen: select ignitionstatus,stringdatetime from processedrawdata) Diesen einen CTE verwendet und ROW_NUMBER eine zusammenhängende Ganzzahl-Sequenz zu den Zeilen hinzuzufügen:

WITH numbered_ignition_states AS 
(
    SELECT row_num = ROW_NUMBER() OVER (ORDER BY stringdatetime), 
      ignitionstatus, 
      stringdatetime 
    FROM  processedrawdata 
    ORDER BY stringdatetime 
) 
SELECT i1.ignitionstatus, i1.stringdatetime 
FROM numbered_ignition_states i1, numbered_ignition_states i2 
WHERE i1.row_num = 1 OR i1.row_num = i2.row_num + 1 AND i1.ignitionstatus != i2.ignitionstatus; 

ursprünglichen Vorschlag, bevor weitere Informationen zur Verfügung gestellt wurden, unter der Annahme, Die Tabelle heißt ignition_states und hat eine zusammenhängende ganze Primärschlüsselspalte id.

SELECT i1.ignition_status, i1.date_time 
FROM ignition_states i1, ignition_states i2 
WHERE i1.id = 1 OR i1.id = i2.id + 1 AND i1.ignition_status != i2.ignition_status; 

+0

select ignitionstatus, stringdatetime von processedrawdata ignitionstatus \t stringdatetime 2017.05.26 17: 17: 50,000 2017-05-26 17: 18: 10,000 2017-05-26 17: 18: 30.000 2017.05.26 17: 18: 50,000 2017-05-26 17: 19: 30,000 2017-05-26 17: 19: 10,000 2017-05-26 17:19: 51.000 2017-05-26 17: 20: 10.000 – wasim

+2

@wasim - bitte keine Beispieldaten als Kommentare. Bitte * editiere * deine Frage (und formatiere sie wie GSerg mit deiner erwarteten Ausgabe), damit sie * lesbar * ist. –