Kalle_B: Satz mit der kleinsten Uhrzeit

Hallöle,

ich grüble darüber nach, ob ich folgendes Problem mit einem (statt mehreren) MySQL 5 - Kommando lösen kann.

Habe eine Tabelle mit Veranstaltungen:

id  adr_id  tag         uhr    text
--  ------  ----------  -----  ---------------
11  135     2009-12-21  07:00  Wanderung
27  135     2009-12-21  17:00  Vortrag
45  257     2010-01-05  10:00  Frühstück
...

Möchte nun pro Veranstalter (adr_id) den Satz inkl. Text mit dem kleinsten Tag/Uhr haben. Wie geht das?

SELECT
 trm1.adr_id                        VIP
,min(CONCAT(trm1.tag,' ',trm1.uhr)) min_tag_uhr
...
GROUP BY adr_id

Mit GROUP habe ich wohl keine Chance, weitere Daten zum Satz mit der gefundenen min_tag_uhr zu greifen? Und die Satz-id bekomme ich auch nicht?

Also hole ich mir in einer while- Schleife die Sätze, die zu den gefundenen Ergebnissen gehören. Wenig elegant.

Lieben Gruß,
Kalle

  1. Hi,

    Möchte nun pro Veranstalter (adr_id) den Satz inkl. Text mit dem kleinsten Tag/Uhr haben. Wie geht das?

    Korrelierte Unterabfrage.

    MfG ChrisB

    --
    “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
    1. Hallo, Chris,

      Korrelierte Unterabfrage.

      Hat funktioniert mit kleinem Trick:

      SELECT
       ...
      WHERE    (CONCAT(trm2.tag,' ',trm2.uhr,' ',trm2.id)) = ANY (
      SELECT
        min(CONCAT(trm1.tag,' ',trm1.uhr,' ',trm1.id)) min_tag_uhr
        ...
        GROUP BY ...
      )

      Mit Trick meine ich, dass ich drei Felder mit concat zusammengefasst habe.

      Könnte ich auch drei Felder einzeln abfragen mit _einem_ Sub- Select?

      WHERE tag = ???
      AND   uhr = ???
      AND   id  = ???

      Gruß, Kalle

      1. Hi,

        Mit Trick meine ich, dass ich drei Felder mit concat zusammengefasst habe.

        WTF?

        Könnte ich auch drei Felder einzeln abfragen mit _einem_ Sub- Select?

        WHERE tag = ???
        AND   uhr = ???
        AND   id  = ???

        Drück dich bitte etwas präziser aus.
        Was genau willst du erreichen?

        Zu Beispieldaten auch das gewünschte Ergebnis anzugeben, ist meist hilfreich.

        MfG ChrisB

        --
        “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
      2. Hallo

        SELECT
        ...
        WHERE    (CONCAT(trm2.tag,' ',trm2.uhr,' ',trm2.id)) = ANY (
        SELECT
          min(CONCAT(trm1.tag,' ',trm1.uhr,' ',trm1.id)) min_tag_uhr
          ...
          GROUP BY ...
        )

        Mit Trick meine ich, dass ich drei Felder mit concat zusammengefasst habe.

        Warum trennst du überhaupt die Uhrzeit vom Datum?

        Tschö, Auge

        --
        Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
        Terry Pratchett, "Wachen! Wachen!"
        Veranstaltungsdatenbank Vdb 0.3
        1. Warum trennst du überhaupt die Uhrzeit vom Datum?

          Gute Frage. Die Idee war, dass ein Event an einem Tag stattfindet von uhr_von bis uhr_bis. Und nicht mehrere Tage im Stück.

          Ein Event vom 31.12.2009 20:00 bis zum 15.01.2010 03:15 ohne Pause ist nicht realisiert, weil es nicht in meinen Erfahrungsschatz passt.

          Du meinst, so etwas gibt es?

          Okay, ein Hallenflohmarkt von 24 Stunden und ein Sechstagerennen nonstop ist mir auch schon untergekommen. Aber ist das die Regel?

          Im Moment kann ich am Tag X kein Event darstellen, das von X -n bis X +m läuft. Bitte nenne mir Beispiele von Events, die 60 oder 120 Stunden laufen. Gibt es sowas?

          Ich will ja die Realität abbilden.

          Gruß, Kalle

          1. Hi!

            Die Idee war, dass ein Event an einem Tag stattfindet von uhr_von bis uhr_bis. Und nicht mehrere Tage im Stück.
            Du meinst, so etwas gibt es?

            Aber Hallo! Woodstock, Haldern, Olympia, Klimakonferenzen, Modellbau-Messen, Games Convention, um nur mal auf die Schnelle ein paar zu nennen.

            Okay, ein Hallenflohmarkt von 24 Stunden und ein Sechstagerennen nonstop ist mir auch schon untergekommen. Aber ist das die Regel?

            Egal. Du versuchst vielleicht ein paar mickrige Byte pro Datensatz zu sparen und das fällt dir nun auf die Füße.

            Lo!

            1. yo,

              Aber Hallo! Woodstock, Haldern, Olympia, Klimakonferenzen, Modellbau-Messen, Games Convention, um nur mal auf die Schnelle ein paar zu nennen.

              die CeBit würde mir noch spontan einfallen, nicht ganz unwichtig für uns ITler...

              Gruß
              Ilja

          2. Hallo

            Warum trennst du überhaupt die Uhrzeit vom Datum?

            Gute Frage. Die Idee war, dass ein Event an einem Tag stattfindet von uhr_von bis uhr_bis. Und nicht mehrere Tage im Stück.

            Ja, und? Deshalb ist 2009-12-21 17:18:00 abweging?

            Okay, ein Hallenflohmarkt von 24 Stunden und ein Sechstagerennen nonstop ist mir auch schon untergekommen. Aber ist das die Regel?

            Derlei Dinge wurden dir ja schon genannt. Davon abgesehen habe ich nur gefragt, warum die die Uhrzeit vom Datum trennst. *Die Frage* hast du standhaft nicht beantwortet. Dafür unterstellst du mir eine Frage, die ich nicht gestellt habe.

            Tschö, Auge

            --
            Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
            Terry Pratchett, "Wachen! Wachen!"
            Veranstaltungsdatenbank Vdb 0.3
  2. Moin!

    Habe eine Tabelle mit Veranstaltungen:

    id  adr_id  tag         uhr    text
    --  ------  ----------  -----  ---------------

    Issnichsogut!

    id  adr_id  datetime    text
    --  ------  --------    ----

    Ich würde an Deiner Stelle die Tabelle umbauen als nachfolgend versuchen den bestehenden Fehler durch komplizierte also fehlerträchtige und inperformante Abfragen zu heilen.

    http://dev.mysql.com/doc/refman/5.1/de/datetime.html

    MFFG (Mit freundlich- friedfertigem Grinsen)

    fastix

    --
    Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development
  3. Moin!

    Hallöle,

    ich grüble darüber nach, ob ich folgendes Problem mit einem (statt mehreren) MySQL 5 - Kommando lösen kann.

      
    SELECT `adr_id`,  
            `id`,  
           `tag`,  
           `uhr`,  
           `text`  
    FROM `TABELLE`  
    GROUP BY `adr_id`  
    ORDER BY `tag`,`uhr`;
    

    Liefert:

      
    addr_id   id   tag         uhr       text  
    135       11   2009_12_21  07:00:00  Wanderung  
    257       45   2010_01_05  10:00:00  Frühstück 
    
    SELECT `adr_id`,  
            `id`,  
           `tag`,  
           `uhr`,  
           `text`  
    FROM `TABELLE`  
    WHERE `tag`=CURDATE()  
    GROUP BY `adr_id`  
    ORDER BY `tag`,`uhr`
    

    Liefert heute, am 21.12.2009:

      
    addr_id   id   tag         uhr       text  
    135       11   2009_12_21  07:00:00  Wanderung
    

    MFFG (Mit freundlich- friedfertigem Grinsen)

    fastix

    --
    Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development