Group By verfeinern am Beispiel

Daisserdochnoch

Benutzer
Beiträge
8
Hallo,

Ich habe eine Liste mit Meldungen, die automatisch ins System laufen, manche Meldungen erfolgen mehrfach
Jede Meldung hat eine laufende Nummer und eine Meldezeit

Ich möchte bestimmte Meldungen filtern, aber auch die doppelten Meldungen rausnehmen. Wenn ich nur die Meldungen Selectiere, ginge das ja einfach mit Distinct. Ich benötige dazu aber auch die laufende Nummer und die Meldezeit. Daher mache ich es mit Group By wie folgt:

Select lfnr, Meldung, Concat(...), Meldezeit
From Tabelle
Where .... and Meldezeit > ...
Group By Meldung
Order By Meldezeit desc

Jetzt gibt mir Group By allerdings immer die früheste Meldezeit, wenn eine gleiche Meldung zu einem späteren Zeitpunkt kommt, dann ändert sich der Eintrag mit dieser Query nicht.
Kann man das hinkriegen, dass nur die Laufnummer und Meldezeit der aktuellsten Meldung in der Gruppierung angegeben wird?

Ich hoffe ihr versteht den Unterschied,
also wenn ich das "Meldezeit > " ändere, dann können sich die gefundenen Einträge der Meldezeiten ändern, wenn nur die aktuellste Meldezeit in der Gruppieung ist, dann wäre bei jeder "Meldezeit > .." Kondition die gleiche Meldezeit im Eintrag.
------------
Alternativ könnte ich wohl erst mit Distinct die Fehlermeldung eindeutifizieren,
die Meldezeit und Laufnummer für eine Meldung auf das größte Filtern und das dann irgendwie verknüpfen, aber wie das zu bewerkstelligen ist mit Code....
 
Zuletzt bearbeitet:
Werbung:
Das SQL ist syntaktisch falsch und es macht wenig Spaß, daraus erkennen zu wollen, was Du willst.

Vielleicht kommst Du besser, Du zeigst einfach mal eine Beispieltabelle (nein, kein Bild, Copy&Paste - fahig wäre besser), damit man das vielleicht nachvollziehen kann.
 
Okay ich hab gerade gesehen das MSSQL mit Group By anders läuft

für MySQL funktioniert das so:

Select lfnr, Meldung , Max(Meldezeit)
From Tabelle
where ... Meldezeit > ..
Group By Meldung
Order By Meldezeit desc

Kann man das irgendwie übertragen?

Ich hab in der Txt mal ein Beispiel gemacht wie es in MYsql läuft. Aber in MSSQL weiß ich es nicht besser, deswegen frage ich.
 

Anhänge

  • beispielmysql.txt
    534 Bytes · Aufrufe: 4
Zuletzt bearbeitet:
Nein. MySQL hat ca. 100.000 Bugs. Einer ist, daß bei syntaktisch falschen Select mit Aggregation und Gruppierung MySQL statt einer Fehlermeldung (die bekommst Du jetzt wohl in M$SQL) einfach nur ein Ergebniss erraten wird - per Zufallsgenerator.
 
Ok, an sich wäre das ja fast genau was ich beabsichtige, daher habe ich das wohl nicht als Bug identifiziert. Oben habe ich ein Beispiel angehangen.
Das ist ja witzig das ich mit Max() den Zufall auf den größten zwingen kann ^^

Eigentlich super praktisch, aber kannst du mir zeigen wie es richtig geht?
 
suchst Du sowas wie:

Code:
edb=*# select * from meldung ;
 lfnr | meldung |      meldezeit     
------+---------+---------------------
    1 | a       | 2021-08-10 09:54:12
    2 | b       | 2021-08-10 09:53:45
    3 | c       | 2021-08-10 09:52:11
    4 | c       | 2021-08-10 09:51:44
    5 | a       | 2021-08-10 09:50:21
    6 | d       | 2021-08-10 09:48:32
(6 rows)

edb=*# with x as (select meldung, max(meldezeit) from meldung group by meldung) select meldung.* from meldung inner join x on (meldung.meldung, meldezeit) = (x.meldung,max);
 lfnr | meldung |      meldezeit     
------+---------+---------------------
    1 | a       | 2021-08-10 09:54:12
    2 | b       | 2021-08-10 09:53:45
    3 | c       | 2021-08-10 09:52:11
    6 | d       | 2021-08-10 09:48:32
(4 rows)

edb=*#
 
Werbung:
Wenn man annimmt, die lfnr im Beispiel ist wirklich eine aufsteigende Nummer und kein reiner Primärschlüssel, könnte man darüber nachdenken. Weiß man ja aber nicht.
 
Zurück
Oben