2016-03-31 19 views
1

Ich muss die Anzahl der Datensätze finden, die größer als ein bestimmter Float sind und die Gruppe der Daten finden, die am häufigsten wiederholen.Finden Sie Muster unter Mysql Einträge

Für Beispiel, ich habe die Daten unten und ich brauche zu finden, wie viele Einträge haben Werte> 4.

1.5 
    1.7 
    4.5 
    4.7 
    4.8 
    1.4 
    4.5 
    4.9 

In den obigen Daten die längste kontinuierliche Wiederholung von Werten größer als 4 ist 4,5, 4.7.4.8.

Deshalb ist die Gesamt Ich sollte 3.

sein mag zurückgegeben würde Wie Sie die Muster bricht nach 4.8 sehen, da die Zahl 1.4 oben ist.

Gibt es eine Möglichkeit, dieses Muster zu identifizieren?

+0

Es ist schwierig in reiner MySQL sieht, warum tun nicht, dass mit der resultierenden Liste aller danach Werte? –

+0

In welcher Reihenfolge bestellen Sie die Datensätze? –

+0

Wie werden die Daten gespeichert/an Ihre Anfrage weitergegeben? Tabellen sind nicht an sich geordnet; wenn das in einer Tabelle mit einem Identitätsfeld ist, das jedoch mit einer Dreiecksverbindung verwendet werden könnte. Wenn es als Eingabe mit Trennzeichen übergeben wird, könnte die Position des Eingabeelements neben dem Wert ausgegeben und zum selben Zweck verwendet werden. Aber ohne zu wissen, wie die Daten ankommen, ist es schwierig, spezifisch zu sein. – eftpotrm

Antwort

1

meinst du sowas?

SELECT count(*) AS nr, IF(num >4,1,0) AS inRange, 
@grpnr := IF (@lastval = @lastval:= IF(num >4,1,0),@grpnr,@grpnr+1) AS grpnr, 
n.* , GROUP_CONCAT(n.num) AS numbers 
FROM mynum n 
CROSS JOIN (SELECT @grpnr:=0, @lastval:=0) AS parameter 
GROUP BY grpnr 
ORDER BY id; 

Probe

MariaDB [who]> SELECT * from mynum; 
+----+------+ 
| id | num | 
+----+------+ 
| 1 | 1.5 | 
| 2 | 1.7 | 
| 3 | 4.5 | 
| 4 | 4.7 | 
| 5 | 4.8 | 
| 6 | 1.4 | 
| 7 | 4.5 | 
| 8 | 4.9 | 
+----+------+ 
8 rows in set (0.00 sec) 

MariaDB []> SELECT count(*) AS nr, IF(num >4,1,0) AS inRange, 
    -> @grpnr := IF (@lastval = @lastval:= IF(num >4,1,0),@grpnr,@grpnr+1) AS grpnr, 
    -> n.* , GROUP_CONCAT(n.num) AS numbers 
    -> FROM mynum n 
    -> CROSS JOIN (SELECT @grpnr:=0, @lastval:=0) AS parameter 
    -> GROUP BY grpnr 
    -> ORDER BY id; 
+----+---------+-------+----+------+-------------+ 
| nr | inRange | grpnr | id | num | numbers  | 
+----+---------+-------+----+------+-------------+ 
| 2 |  0 | 0  | 1 | 1.5 | 1.5,1.7  | 
| 3 |  1 | 1  | 3 | 4.5 | 4.5,4.7,4.8 | 
| 1 |  0 | 2  | 6 | 1.4 | 1.4   | 
| 2 |  1 | 3  | 7 | 4.5 | 4.5,4.9  | 
+----+---------+-------+----+------+-------------+ 
4 rows in set (0.01 sec) 

MariaDB []>