Duplikate auf bestimmte Anzahl begrenzen

ruutaiokwu

Top Contributor
Doppelte Einträge sollten max. 3x drin sein, gibt es eine bessere Lösung als das?

SELECT DISTINCT `et`.`code` FROM xyz et WHERE `et`.`timestamp` > (TIMESTAMPADD(SECOND, -15, NOW()))
UNION ALL
SELECT DISTINCT `et`.`code` FROM xyz et WHERE `et`.`timestamp` > (TIMESTAMPADD(SECOND, -15, NOW()))
UNION ALL
SELECT DISTINCT `et`.`code` FROM xyz et WHERE `et`.`timestamp` > (TIMESTAMPADD(SECOND, -15, NOW()))

Danke für die Feedbacks.
 
Nein ist auch keine Lösung, wenn es nur 1 oder 2x drin ist wird es ebenfalls auf 3 vervielfacht. Ab > 3 sollte auf 3 begrenzt werden, drunter sollte die real in der Tabelle hinterlegte Menge ausgegeben werden.
 
Handelt es sich bei den Einträgen um Duplikate (identische Zeitstempel) oder willst Du die max. drei jüngsten Einträge?
 
Leider wird nicht in Millisekunden gespeichert, deshalb haben die teilweise den gleichen Zeitstempel. Der Zeitstempel ist im Prinzip sowieso egal, mein vorgeschlagener Code ist eh nicht geeignet.

Ich will nur Duplikate aus dem Feld "code" max. 3 mal anzeigen lassen. Wenn mehr als 3x, dann wird auf 3 "gedeckelt".
 
Also etwas wie (MySQL-Syntax):
SQL:
SELECT DISTINCT `et`.`code` FROM xyz et WHERE `et`.`timestamp` > (TIMESTAMPADD(SECOND, -15, NOW())) LIMIT 3;
 
Ich will nur Duplikate aus dem Feld "code" max. 3 mal anzeigen lassen.
Ach, so.
Code:
mysql> select * from w;
+------+------+
| c    | n    |
+------+------+
| A    |    1 |
| A    |    1 |
| A    |    1 |
| A    |    1 |
| A    |    1 |
| B    |    1 |
| B    |    1 |
| C    |    1 |
| C    |    1 |
| C    |    1 |
| C    |    1 |
+------+------+
11 rows in set (0.00 sec)
SQL:
SELECT * FROM (
SELECT 
    CASE c WHEN @c THEN
            @curRow := @curRow + 1 
        ELSE @curRow := 1
    END as zeile,
    @c := c AS c
FROM w
JOIN (SELECT @curRow := 0, @c := min(c), @curType := '' FROM w) r) x
WHERE zeile < 4;
Ergebnis:
Code:
+-------+------+
| zeile | c    |
+-------+------+
|     1 | A    |
|     2 | A    |
|     3 | A    |
|     1 | B    |
|     2 | B    |
|     1 | C    |
|     2 | C    |
|     3 | C    |
+-------+------+
8 rows in set (0.00 sec)
 

Zurück
Oben