Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Datensätze filtern (Max / Group by)

Empfohlene Antworten

Veröffentlicht

Hallo Zusammen

Ich kenne mich in SQL nur mit den Basics aus und stehe nun bei einem Problem an. Ich möchte eine Abfrage aus einer MySQL DB machen, bei der nur jeweils die Zeilen mit der höchsten Versions-Nummer ausgegeben werden,

Man hat z.B. folgende Tabelle:

________________________

| id | Version | Text |

=====================

| 1 | 1 | row1 |

| 1 | 2 | row2 |

| 2 | 1 | row3 |

---------------------------

In meiner Ausgabe will ich nun nur die Datensätze mit der höchsten Version-Nummer haben. Also z.B:

| 1 | 2 | row2 |

| 2 | 1 | row3 |

Wenn ich nun folgende Abfgrage verwende:

SELECT id, max(version), text FROM `test` Group by id

bekomme ich folgendes Ergebnis.

| 1 | 2 | row1 |

| 2 | 1 | row3 |

Ich bekomme also nur die grösste Version-Nummer für die jeweilige ID zurück, aber nicht die ganze Zeile, die zu der ID gehört. Die Spalte Text gehört immer noch zum ersten Datensatz.

Müsste man hier die Abfrage mit einer zweiten Select Anweisung in einer Where-Abfrage machen oder etwas in der Art?

Vielen Dank für eure Hilfe.


Wenn ich nun folgende Abfgrage verwende:

SELECT id, max(version), text FROM `test` Group by id
Was du brauchst ist nicht die max(version) im select, sondern als filter in der WHERE oder von mir aus auch HAVING klausel.
DECLARE @test TABLE(pk int, id INT, vers INT, txt VARCHAR(255))

INSERT INTO @test Values (1,1,1,'eins'), (2,1,2,'zwei'), (3,2,1,'drei')


SELECT *

FROM @test t1

WHERE t1.pk =

	(SELECT top 1 pk 

	 FROM @test t2 

	 WHERE t2.id = t1.id 

	 ORDER BY id DESC

) 

war jetzt in mssql auf die schnelle reingehackt, kann mir allerdings nicht vorstellen, dass mysql das nicht frisst. (von der table variablen mal abgesehen, das is ja aber nich das zentrale)

pk steht übrigens für primary Key, ich hoff mal seeehr stark, dass du einen in der Tabelle hast.

Gruß

Sven

Vielen Dank für deine Antwort.

Ich habe natürlich Primary Keys in der Tabelle (id und version zusammen), hab ich vergessen zu schreiben...)

Gruss

netcon

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.