SQL - nur zeitlich letzter Wert bei gleichen Spalteninhalt

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

SQL - nur zeitlich letzter Wert bei gleichen Spalteninhalt

Beitrag von Stephan »

Hallo,

die Frage ist wohl etwas unverständlich aber ich brauche eine Abfrage die mir aus folgender Tabelle:

Code: Alles auswählen

ID   EinWert   LetzteÄnderung 
--------------------------------
001  ABC       17.01.2021
002  DEF       18.01.2021 
003  GHI       12.02.2021
004  ABC       15.07.2021
005  GHI       12.07.2021
006  ABC       12.07.2021
das als Rückgabe liefert:

Code: Alles auswählen

ID   EinWert   LetzteÄnderung 
--------------------------------
002  DEF       18.01.2021 
004  ABC       15.07.2021
005  GHI       12.07.2021
also für jeden überhaupt in Spalte "EinWert" vorkommenden Wert den jeweils neuesten Wert (wenn es mehrere Einträge gibt) oder den einzigen Wert (wenn es nur einen 'gleichen' Eintrag gibt)

Datenbank ist MySQL.


Ich fürchte das ist ziemlich schwierig ...



Gruß
Stephan
Hiker
******
Beiträge: 590
Registriert: Mo, 08.09.2014 21:34
Wohnort: Berlin

Re: SQL - nur zeitlich letzter Wert bei gleichen Spalteninhalt

Beitrag von Hiker »

Libre Office 6.3.1 (Win 10 Pro) / Libre Office 6.0.7 (Win8.1 Pro, Win 7 Pro) / AOO (Win 7)
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: SQL - nur zeitlich letzter Wert bei gleichen Spalteninhalt

Beitrag von RobertG »

Hallo Stefan,

das Anzeigen der ID macht das Ganze etwas schwieriger, geht aber auch:

Code: Alles auswählen

SELECT 
(SELECT "ID" FROM "Tabelle" WHERE "EinWert" = "a"."Einwert" AND "LetzteÄnderung" = "a"."LetzteÄnderung") AS "ID", 
"a".* 
FROM 
(SELECT "EinWert", MAX( "LetzteÄnderung" ) AS "LetzteÄnderung" FROM "test"."Tabelle" "Tabelle" GROUP BY "EinWert") AS "a"
Hier noch eine andere Variante, die nicht daran scheitert, wenn "LetzteÄnderung" bei "EinWert" eventuell doppelt vorkommt:

Code: Alles auswählen

SELECT "b".* 
FROM (SELECT "EinWert", MAX( "LetzteÄnderung" ) AS "LetzteÄnderung" FROM "test"."Tabelle" "Tabelle" GROUP BY "EinWert") AS "a", 
(SELECT * FROM "test"."Tabelle") AS "b" 
WHERE "b"."EinWert" = "a"."Einwert" AND "b"."LetzteÄnderung" = "a"."LetzteÄnderung"
Gruß

Robert
Zuletzt geändert von RobertG am Sa, 17.07.2021 07:54, insgesamt 1-mal geändert.
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: SQL - nur zeitlich letzter Wert bei gleichen Spalteninhalt

Beitrag von Stephan »

Hallo Hiker,
Hallo Robert,

vielen Dank für die Unterstützung. Ich werde eure Vorschläge ausprobieren sobald ich Zeit habe.


Gruß
Stephan
Antworten