Ankündigung

Einklappen
Keine Ankündigung bisher.

GROUP BY mit Priorität

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • GROUP BY mit Priorität

    ich schon wieder

    Ich habe eine sql anweisung,mit der ich aus zwei tabellen auslese,
    wann ein user etwas geändert hat:
    PHP-Code:
    select id,change_time FROM
    (
    SELECT account.user_id as id,change_time FROM prof_img
    LEFT JOIN account ON prof_img
    .user_id account.user_id
    WHERE account
    .aktiv <> "B"
    UNION
    SELECT account
    .user_id as id,change_time FROM prof_text
    LEFT JOIN account ON prof_text
    .user_id account.user_id
    WHERE account
    .aktiv <> "B"
    )
    Ich erhalte folgende Ausgabe:
    PHP-Code:
    ID+++Zeit der Änderung
    user 1   10
    :20UHR
    user 2   11
    :10UHR
    user 2   11
    :15UHR
    user 2   15
    :30UHR
    user 3   12
    :20UHR 
    wenn ich jetzt:
    PHP-Code:
    GROUP BY id ORDER BY change_time 
    ergänze,
    erhalte ich:
    PHP-Code:
    ID+++Zeit der Änderung
    user 1   10
    :20UHR
    user 3   12
    :20UHR
    USER 2   15
    :30UHR 
    Soweit so gut.Allerdings möchte ich lieber,dass bei user 2 die älteste zeit genommen wird (hier:user 2 11:10UHR).

    Gibt es eine möglichkeit GROUP BY so zu modifizieren,dass es die neueren Zeiten rauschmeißt, ich also:
    PHP-Code:
    ID+++Zeit der Änderung
    user 1   10
    :20UHR
    USER 2   11
    :10UHR
    user 3   12
    :20UHR 
    erhalte?

    Vielen Dank

  • #2
    Zitat von easyAnfaenger26 Beitrag anzeigen

    Vielen Dank

    Ich schenke Dir die Doku zu Aggregatsfunktionen: http://www.postgresql.org/docs/9.3/i...ons-array.html
    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

    Kommentar


    • #3
      achso ich hätte wohl erwähnen müssen, dass ich jetzt doch bei mysql geblieben bin.ich bring postgresql mit xampp nicht zum laufen,aber das ist ein anderes thema....

      Kommentar


      • #4
        achso ich hätte wohl erwähnen müssen, dass ich jetzt doch bei mysql geblieben bin.ich bring postgresql mit xampp nicht zum laufen,aber das ist ein anderes thema....
        Schau mal hier: http://thecuda.wordpress.com/2010/10...resql-support/

        Nicht wundern: akretschmer verweist regelmässig direkt oder indirekt auf postgresql
        while (!asleep()) sheep++;

        Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

        Kommentar


        • #5
          Zitat von easyAnfaenger26 Beitrag anzeigen
          achso ich hätte wohl erwähnen müssen, dass ich jetzt doch bei mysql geblieben bin.ich bring postgresql mit xampp nicht zum laufen,aber das ist ein anderes thema....
          Ich denke, die Chancen stehen recht gut, daß MySQL das schon implementiert hat.
          PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

          Kommentar


          • #6
            ich muss allerdings zugeben dass ich mit den funktionen nichts anfangen kann..
            wie soll das denn dann aussehen?
            PHP-Code:
            GROUP BY array_remove(anyarrayanyelementORDER BY.. 

            Kommentar


            • #7
              Zitat von easyAnfaenger26 Beitrag anzeigen
              ich muss allerdings zugeben dass ich mit den funktionen nichts anfangen kann..
              wie soll das denn dann aussehen?
              PHP-Code:
              GROUP BY array_remove(anyarrayanyelementORDER BY.. 
              Code:
              test=*# create table anfaenger (usr int, zeit int);
              CREATE TABLE
              test=*# copy anfaenger from stdin;
              Enter data to be copied followed by a newline.
              End with a backslash and a period on a line by itself.
              >> 1    10
              >> 1    12
              >> 1    13
              >> 2    12
              >> 3    11
              >> \.
              test=*# select usr, max(zeit) from anfaenger group by usr;
               usr | max
              -----+-----
                 1 |  13
                 3 |  11
                 2 |  12
              (3 rows)
              PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

              Kommentar


              • #8
                hmm interessant,vor allem dass ich nur einen eintrag bekomme,wenn ich GROUP BY weglasse, so als wäre die minimal funktion mit GROUP BY irgendwie magisch miteinander verknüpft..sehr mysteriös aber es klappt

                Kommentar


                • #9
                  Zitat von easyAnfaenger26 Beitrag anzeigen
                  hmm interessant,vor allem dass ich nur einen eintrag bekomme,wenn ich GROUP BY weglasse, so als wäre die minimal funktion mit GROUP BY irgendwie magisch miteinander verknüpft..sehr mysteriös aber es klappt
                  Ohne GROUP BY ist es ein Verstoß gegen die SQL-Norm, PG würde das auch nicht zulassen:

                  Code:
                  test=*# select usr, max(zeit) from anfaenger ;
                  ERROR:  column "anfaenger.usr" must appear in the GROUP BY clause or be used in an aggregate function at character 8
                  STATEMENT:  select usr, max(zeit) from anfaenger ;
                  ERROR:  column "anfaenger.usr" must appear in the GROUP BY clause or be used in an aggregate function
                  LINE 1: select usr, max(zeit) from anfaenger ;
                  MySQL ist behindert, erkennt den Fehler nicht und macht irgend was. MySQL ist, soweit ich weiß, damit einmalig. Einmalig blöd.
                  PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                  Kommentar

                  Lädt...
                  X