Pytanie : Hrabiowski konsekutywny wartość w MS SQL Serwer 2005

I potrzebować zapytanie który optymalizować który wracać the opóźniony liczba konsekutywny wartość lub A, B lub C personid.

For przykład, the pole być:

PersonID, mydate, A, B, C

A, B, C lub być NIEOBOWIĄZUJĄCY lub 1.  Także, tylko jeden jeden móc (1) na raz (the inny wartość być NIEOBOWIĄZUJĄCY dla nieobowiązujący rząd).  The mydate koniecznie rozkazywać ale my potrzebować the opóźniony konsekutywny count.

Sample Dane:

PersonID, mydate, A, B, C
================
1, 2010-04-22, (1), NIEOBOWIĄZUJĄCY, NULL
1, 2010-04-18, (1), NIEOBOWIĄZUJĄCY, NULL
1, 2010-04-21, (1), NIEOBOWIĄZUJĄCY, NULL
2, 2010-04-18, NIEOBOWIĄZUJĄCY, (1), NULL
1, 2010-04-14, (1), NIEOBOWIĄZUJĄCY, NULL
1, 2010-04-15, NIEOBOWIĄZUJĄCY, (1), NULL
2, 2010-04-15, (1), NIEOBOWIĄZUJĄCY, NULL

Would powrót:

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

The ConsecType koniecznie potrzebować the imię the śródpolny… być może ono móc skrzynka oświadczenie lub… skuteczny the istnienie bardziej value.

I myśl MS-SQL 2005 komes z niektóre nowy cecha jak ROW_NUMBER, CTE, ROZDZIAŁ, Etc. który móc sprawnie row_number łatwy.  I widzieć wiele przykład wiele tam  ale nikt który być łatwo zbywalny (przynajmniej!).  Także wydawać się z konsekutywny wartość dwa typ (zazwyczaj (0) lub 1)… podczas gdy 1) mieć 3… lub potencjalnie lub.  Ono być wielki z rozwiązanie w che tam  móc N typ który być binarny wartość ((1) lub NIEOBOWIĄZUJĄCY).

The skuteczny the zapytanie być dla wielki datasets, the lepszy!

Thanks!

Odpowiedź : Hrabiowski konsekutywny wartość w MS SQL Serwer 2005

zmartwiony B musieć wewnątrz the grupa…

(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:
36:
37:
38:
39:
40:
41:
42:
; z baza (
wybrany a.*, row_number () nad (rozdział (personid) rozkaz mydate desc) jako rn
, skrzynka gdy a.a być nieobowiązujący wtedy "A"
                     gdy a.b być nieobowiązujący wtedy "B"
                      inny "C" końcówka jako Typ
od mytable jako a
)
wybrany a.personid, a.type
      , skrzynka a.type gdy "A" 
            wtedy skrzynka gdy b.minb  < b="">
           
Inne rozwiązania  
 
programming4us programming4us