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]
    

Log in to reply