2017-05-26 3 views
-1

Ich habe ein Problem. Ich möchte die Datenbank Oracle-Abfrage schreiben, die auf der Grundlage der Daten aus dem BildOracle - Gruppierung nach Kategorie, Datumsbereich

enter image description here

das Ergebnis schaffen:

START_DATE   |END_DATE   |COLOR 
-------------------|-------------------|------ 
2017-05-25 15:39:39|2017-05-25 15:41:06|GREEN 
2017-05-25 15:41:06|2017-05-25 15:53:27|ORANGE 
2017-05-25 15:53:27|2017-05-25 15:57:16|GREEN 
2017-05-25 15:57:16|2017-05-25 15:59:24|YELLOW 

etc ...

+2

Bitte Daten als formatierten Text, [keine Screenshots] (http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code-on-so-when -Arbeitsfrage/285557 # 285557). Was hast du bisher versucht? – Aleksej

Antwort

3

Sie versuchen, finde benachbarte Werte. Ein Verfahren verwendet eine Differenz von Zeilennummern:

select min(start_date) as start_date, max(start_date) as end_date, color 
from (select t.*, 
      row_number() over (order by start_date) as seqnum, 
      row_number() over (partition by color order by start_date) as seqnum_c 
     from t 
group by (seqnum - seqnum_c), color; 

Es ist ein bisschen zu erklären, herausfordernd, warum der Unterschied von Zeilennummern funktionieren. Ich ermutige Sie, die Unterabfrage auszuführen und auf die Zahlen zu starren. Sie sollten sehen können, warum die Differenz für benachbarte Farbwerte konstant ist.

+0

Diese Technik ist bekannt als [Tabibitosan] (http://rwijk.blogspot.co.uk/2014/01/tabibitosan.html) – Boneist

+0

Anstatt die gleiche Frage zum x-ten Mal zu beantworten - das nächste Mal könnten Sie wieder durch Ihre vorherige Antworten und finden Sie ein Duplikat und markieren Sie die Frage als solche. – MT0

+0

Mit Ihrer Antwort stimmt etwas nicht. Ich habe nichts wie das Enddatum, in der Datenbank habe ich nur Aufzeichnungen über das Startdatum. Ich mache einen Unterschied (Verzögerung) zwischen den Linien, um zu sehen, wie lange es dauert, um ein Detail an der Maschine zu machen. Darüber hinaus "Gruppe von" ist für die gesamte Abfrage oder wählen Sie einfach "t"? –