2012-04-08 6 views
0

Angenommen, ich habe einen Primärschlüssel pk und eine Nullable Spalte col. Ich möchte aufeinanderfolgende Reihenfolgen finden, wobei colNULL ist, geordnet in absteigender Reihenfolge der Lauflänge.Wie werden Lauflängen von NULL-Läufen in MySQL gezählt?

Ich werde als eine gültige Antwort eine Abfrage akzeptieren, die die Lauflängen allein zurückgibt, aber in der Zukunft (vielleicht in einer separaten Frage) werde ich einige pk wissen möchte, die mich entweder auf den Anfangs- oder Endpunkt zeigt jeder Lauf.

Beispieldaten:

pk col 
-- --- 
1  'a' 
2  NULL 
3  'b' 
4  NULL 
5  NULL 
6  NULL 
7  'c' 
8  NULL 
9  NULL 
10 'd' 

Erwartetes Abfrageer:

runlengths 
---------- 
3 
2 
1 

Ich ziehe Standard-SQL, wenn möglich, aber dies ist ein Produktionsdatensatz gespeichert in MySQL für die Analyse, so was am besten funktioniert in dieser Kontext.

+0

Wahrscheinlich zu spät, um jetzt zu ändern, aber für zukünftige Referenz wäre es besser für Sie, eine Datenbank zu verwenden, die die Standard-SQL-Analysefunktionen unterstützt (d. H. So ziemlich alles außer MySQL). –

+0

Yup! Es war in diesem Fall völlig außer Kontrolle geraten, aber für meine eigenen Projekte werde ich Ihre Ratschläge berücksichtigen. –

Antwort

6

Versuchen Sie es.

Es ist T-SQL-Dialekt, aber ich glaube, es ist klar genug.

Es gibt ein Problem mit dieser Abfrage, wenn die erste/letzte Zeile NULL-Wert hat, aber es ist nicht schwer, das zu beheben. Wie das geht, hängt von Ihren Anforderungen ab.

+0

es lief nicht für mich –

+0

und was ist los? –

+0

es gibt mir kein Ergebnis –

3

dieses Probieren Sie:

select count(*) runlengths from (
    select col, @count := @count + (col is not null) cnt 
    from t, (select @count := 0) init 
) final 
where col is null 
group by cnt 
order by count(*) desc 

Fiddle here.

Verwandte Themen