MySQL Rows Grouping

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von samson.

    MySQL Rows Grouping

    Hallo an alle,

    Ich habe ein Programm, das von jeder Veränderung eine neue Zeile in eine History-Tabelle anlegt.

    Die Tabelle ist mit folgenden Spalten (unter anderem) besetzt.

    Action (insert,delete,update)
    dt_datetime (datetime von Erstellung)
    ID
    Abteilung(integer der Abteilung)
    ...


    Nun zur Frage:

    Wenn verschiedene Benutzer eine Zeile editieren, kommen mehrere Zeilen der History-Tabelle zusammen.

    kann ich meine extrem große History-Tabelle so kürzen, dass immer nur die letzte Zeile von einer Abteilung vorkommt?

    Beispiel:


    action
    dt_datetime
    ID
    Abteilung
    update
    2016-06-16 00:00
    1
    1
    update
    2016-06-16 00:30
    1
    1
    update
    2016-06-16 5:00
    1
    1
    update
    2016-06-16 6:00
    1
    2
    ...

    Ziel:
    update
    2016-06-16 5:00
    1
    1
    update
    2016-06-16 6:00
    1
    2
    ...


    Es soll immer die letzte Zeile einer Veränderungshistorie angezeigt werden und das pro Abteilung, nach Datum sortiert.

    geht das im SQL überhaupt, oder muss die Tabelle über das Programm im Nachhinein bearbeitet werden?
    Dem MySQL Server ist momentan "langweilig" also wäre ein zuverlässiges Query die Wahl.
    Moin Moin @Gunngir

    Wenn ich das richtig verstanden habe suchst du nur den Group Befehl für den SQL Query?

    SQL-Abfrage

    1. SELECT * FROM TABLE GROUP BY Abteilung


    Damit werden alle Einträge zusammengeführt. Im Normalfall ist der neueste der oberste und wird somit ausgegeben.

    Alternativ kann man auch eine Abfrage auf die komplette Tabelle machen, Ergebnisse absteigend sortieren lassen nach dt_datetime und als Rückgabe nur 1 Zeile.

    SQL-Abfrage

    1. SELECT * FROM TABLE ORDER BY dt_datetime DESC LIMIT 1


    Ich hoffe ich konnte helfen.

    Grüße Stefan
    Nein! Doch! OHH!
    servus Samson,


    geht das dann auch, wenn die Abteilungen später nochmals mit 1 kommen?
    Hintergrund: Abteilungen können mit mehreren Lieferständen mehrmals durchgelaufen werden.


    Die Abteilungen können in der Historie-Tabelle wie unten aussehen:
    Dann versuche ich es mal mit der zweiten Option von Dir, da die erste ein normales Grouping ist, was bei mir wohl vollkommen in die Hose fällt.


    Ziel ist folgendes:
    Order by Datum
    Group by Abteilung, wenn zusammenhängende Zeilen

    normales Grouping war mir schon bekannt, aber das ist ja ein etwas komplizierterer Fall und bin bis dort hin noch zu keiner Lösung gekommen :) )
    1
    1
    1
    1
    2
    2
    2
    2
    2
    3
    3
    4
    4
    4
    4
    5
    5
    6
    6
    6
    7
    1
    1
    1
    2
    2
    3
    3
    3
    ...
    @Gunngir sorry für die späte Antwort, war eine weile offline :(
    Grundsätzlich gruppiert dies die Anfrage anhand der ID Nummer.

    am besten prüfst du die Abfrage erstmal im MySQL bzw im phpMyAdmin.

    Dies sollte dir die Antwort liefern, ob dir das Ergebnis dann so passt oder nicht, musst du für dich herausfinden.
    Nein! Doch! OHH!