Bei Datensätzen mit gleichen Werten in bestimmten Spalten nur den ersten Datensatz ausgeben
-
Wie lautet die SQL-Abfrage, wenn ich will, dass bei Datensätzen, in denen in bestimmten Spalten gleiche Werte vorkommen, nur der erste Datensatz ausgegeben wird?
Beispieltabelle:
ID Name Monat Jahr -- ------- ------ ---- 1 Hinz Januar 2011 2 Kunz Januar 2011 3 Maier Juni 2010 4 Lehmann Mai 2011 5 Schulz Juni 2010
Nach meiner Abfrage soll nun folgendes ausgegeben werden:
ID Name Monat Jahr -- ------- ------ ---- 1 Hinz Januar 2011 3 Maier Juni 2010 4 Lehmann Mai 2011
Also immer dann, wenn zwei Datensätze denselben Monat und dasselbe Jahr haben, soll von ihnen nur der erste ausgegeben und alle weiteren ignoriert werden.
-
Das ist nicht ganz so einfach, grundsätzlich suchst du "GROUP BY year, month", allerdings kannst du dann nur Spalten SELECTen die auch in der GROUP BY-Klausel stehen oder auf die du eine Aggregation anwendest (bspw. max(id)).
Wenn du bspw. noch einen Timestamp hast könntest du den Namen nehmen der innerhalb der Gruppe den kleinsten Timestamp hat, das würdest du dann wie hier beschrieben: http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/ in der HAVING-Klausel festlegen. Ansonsten reduzierst du eben auf denjenigen mit der niedrigsten ID in der HAVING-Klausel.
MfG SideWinder
-
Wozu HAVING?
SELECT * FROM [Blah] WHERE [ID] IN ( SELECT min([ID]) FROM [Blah] GROUP BY [Monat], [Jahr] ) ORDER BY [ID]