Frage : Nachfolgende Werte des Zählimpulses in Mitgliedstaat-SQL-Server 2005

Ich benötige eine Frage, die, das die späteste Zahl nachfolgenden Werten entweder von A, von B oder von C durch personid.

zum Beispiel zurückbringt, die Felder sind optimiert wird:

PersonID, mydate, A, B, C

A, B, C entweder ist NULL oder 1.  Auch nur ein von diesen kann 1 auf einmal haben (die anderen Werte sind für jede Reihe UNGÜLTIG).  Das mydate wird nicht notwendigerweise bestellt, aber wir benötigen die spätesten nachfolgenden count.

Sample Daten:

PersonID, mydate, A, B, C
================
1, 2010-04-22, 1, NULL, NULL
1, 2010-04-18, 1, NULL, NULL
1, 2010-04-21, 1, NULL, NULL
2, 2010-04-18, NULL, 1, NULL
1, 2010-04-14, 1, NULL, NULL
1, 2010-04-15, NULL, 1, NULL
2, 2010-04-15, 1, NULL, NULL

Would Rückkehr:

PersonID, ConsecType, ConsecCount
======================
1, A, 3
2, B, 1

The ConsecType nicht notwendigerweise braucht, der Name des Feldes zu sein,… möglicherweise, das es eine Fallaussage verwenden könnte, oder etwas, das leistungsfähiger ist, das Bestehen von dem zu kennzeichnen value.

I, denken, dass MS-SQL 2005 mit einigen neueren Eigenschaften wie ROW_NUMBER, CTE, FACH, etc. kommt, die sein können, einfacheres dieses zu lösen.  Ich habe viele Beispiele heraus dort aber keine gesehen, die leicht übertragbar sind (mindestens zu mir!).  Sie scheinen auch, nachfolgende Werte von zwei Arten zu beschäftigen (normalerweise 0 oder 1)…, während dieses 3… oder möglicherweise mehr hat.  Es würde groß sein, mit einer Lösung aufzukommen, in der es n-Arten geben könnte, die vom binären Wert sind (1 oder NULL). das

The leistungsfähiger die Frage ist für große Datensätze, das bessere!

Thanks!

Antwort : Nachfolgende Werte des Zählimpulses in Mitgliedstaat-SQL-Server 2005

trauriges b sollte, nicht haben die Gruppe durch einzutippen…

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
6:
37:
38:
39:
40:
41:
42:
; mit Unterseite wie (
a.*, row_number vorwählen () über (Fach durch (personid) Auftrag durch mydate desc) als rn
, Fall, wenn a.a ist nicht ungültiges dann „A“
                     wenn a.b ist nicht ungültiges dann „B“
                      sonst „c-“ Ende als Art
von mytable als a
)
a.personid, a.type vorwählen
      , Fall a.type, wenn „A“ 
            dann Fall wenn b.minb  < b="">
           
Weitere Lösungen  
 
programming4us programming4us