2016-10-31 1 views
1

Ich habe eine Testberichttabelle, die nach jedem Testlauf eine Zeile schreibt.Versuch, eine Teradata-Ansicht zu erstellen, um zu aggregieren, wie lange Zeilen einer bestimmten ID einen bestimmten Wert hatten

Lassen Sie uns sagen, dass dies die Daten:

| main_id | status | date | 
|---------|--------|---------| 
| 123 | pass | Jan 1st | 
| 123 | fail | Jan 2nd | 
| 123 | fail | Jan 3rd | 
| 123 | fail | Jan 4th | 

ich einen Blick machen wollen, dass für jeden Test, listet, wie es andernfalls schon lange hat.

Wesentlichen die entsprechende Zeile für die obigen Daten würde wie folgt aussehen:

| main_id | days_failing | 
|---------|--------------| 
| 123 |  3  | 

Mit Teradata SQL, wie könnte jede Zeile in der Quelltabelle überprüfen, für den letzten Erfolg suchen, und dann alles zusammenzufassen die nachfolgenden Fehler?

Bearbeiten: Beachten Sie, dass es viele verschiedene "main_id" s in der Quellentabelle geben würde, würde ich 1 Zeile in der Ansicht für jeden eindeutigen fehlgeschlagenen Test in der Quellentabelle benötigen.

Dank

Antwort

1
select  main_id 
      ,count (*) - 1 as days_failing 

from  (select  main_id 
         ,"date" 

      from  t 

      qualify  "date" >= max (case status when 'pass' then "date" end) over (partition by main_id) 
      ) t 

group by main_id 

order by main_id 
; 
+0

Hmmm ... diese (Option 1) wird immer in der Nähe, dass es nur die Zeilen mit einem Defekt tut wählen, aber es das days_failing Feld wird mit 1, egal wie viele Tage nur bevölkert von fehlgeschlagene Instanzen hat ein Test. Dies kann wichtig sein, aber mein Datumsfeld ist eigentlich ein Zeitstempel, ich habe es einfach für diese Frage gestrafft. – user1029167

+0

Ihr zweites Beispiel hat perfekt funktioniert, danke! – user1029167

+0

@ user1029167, Die Abfrage zählt die Anzahl der Zeilen nach dem letzten Durchlauf. Es macht nicht, seit dem bekommst du immer 1, es sei denn, das sind ja deine Daten –

Verwandte Themen