Doppelte Einträge - nicht so trivial

H

Hegro

Hallo zusammen,
ich hab folgendes Problem. Als gegeben gilt die folgende Tabelle:
Code:
HName           VersNr  RelNr  	HID
-----------------------------------
SoftwareA 	1.2 	050105 	1
SoftwareA	2.0 	060623 	2
SoftwareB 	5.0 	060213 	3
SoftwareC 	1.5 	050824 	4
SoftwareC 	1.2 	040617 	5
SoftwareD 	2.0 	050221 	6
SoftwareD 	2.0 	050325 	7

Auf dieser Tabelle möchte ich jetzt eine Abfrage aus führen
die mir nur die Software mit der höchsten VersNr und RelNr
anzeigt. So sollte die Ergebnistabelle dann aussehen:
Code:
HName           VersNr  RelNr  	HID
-----------------------------------
SoftwareA	2.0 	060623 	2
SoftwareB 	5.0 	060213 	3
SoftwareC 	1.5 	050824 	4
SoftwareD 	2.0 	050325 	7

Ich hab schon vieles probiert (group by, distinct,
corellated subqueries), aber ich noch keine lösung gefunden.
wahrscheinlich ist es simpel, aber ich hab da anscheinend
eine kleine denkblockade.

schon mal danke im vorraus

Gruß

Markus
 
Probier mal folgende Abfrage:
Code:
SELECT
        `HName`,
        `VersNr`,
        `RelNr`,
        `HID`

  FROM
        …

  GROUP BY
        `HName`

  ORDER BY
        `VersNr` DESC,
        `RelNr` DESC
 
diese abfrage ergibt folgendes Ergebnis:

HName VersNr RelNr HID
--------------------------------------------------
SoftwareB 5.0 060213 3
SoftwareD 2.0 050221 6
SoftwareC 1.5 050824 4
SoftwareA 1.2 050105 1

Bei SoftwareB ist alles ok, aber bei SoftwareA hat er es nicht gemacht i don't know why
 
Hegro hat gesagt.:
Bei SoftwareB ist alles ok, aber bei SoftwareA hat er es nicht gemacht i don't know why
Das liegt daran, dass MySQL bei der Nutzung von group by etwas "anders" verfährt als andere DBMS.
Normalerweise muss beim Einsatz von Group By jedes Feld in der Group By - Clause oder in einer Aggregatfunktion stehen. Bei MySQL ist das nicht so. MySQL akzeptiert auch Queries, bei den das nicht der Fall ist und nimmt dann automatisch einen Wert aus dem Datensatz, den es für die entsprechende Gruppe findet.

Was kommt den raus, wenn du bei dem Query von Gumbo bei den Feldern VersNr und RelNr zusätzlich die Funktion MAX nutzt?
 
das mit dem MAX bei VersNr und RelNr hab ich auch schon probiert und das ist auhc nichts. habs jetzt gelöst. ist zwar keine schöne lösung aber sie funktioniert 100%ig:

Code:
SELECT HName, VersNr, RelNr, HID
FROM (
   SELECT hw2.HName, hw2.VersNr, MAX( hw2.RelNr ) AS RelNr
   FROM (
      (SELECT hw1.HName, MAX( hw1.VersNr ) AS VersNr
       FROM `Hardware` hw1
       GROUP BY s1.HName) AS hw3
       JOIN `Hardware` AS hw2
       USING ( HName, VersNr )
      ) 
   GROUP BY hw2.HName, hw2.VersNr) AS s4
   JOIN `Hardware` s5
   USING ( HName, VersNr, RelNr )
 
Zurück