komplexe SQL Abfrage

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

  • komplexe SQL Abfrage

    Hallo,

    ich habe ein Programm geschrieben, welches mir eine Logdatei auswerten soll. Die Datensätze sind in einer DB gespeichert. Mein Problem ist, dass ich in einer Tabelle alle Installationroutinen gespeichert habe. Bei der Installation können verschiedene Pakete installiert werden. Ich brauche aber zu jedem Gerät nur das neuste Paket von jeder Sorte. Bsp.:

    Seriennummer Install Major Minor Build Datum Uhrzeit
    60109102 printlayouts 1 0 6 2006.09.11 14:25:22 x
    60109102 tariff_data 89 0 4 2006.09.11 14:25:48 x
    60109110 printlayouts 1 0 6 2006.09.07 07:48:38 x
    60109110 sperrlistenm 27 0 0 2006.09.14 07:14:02 x
    60109110 tariff_data 89 0 4 2006.09.14 07:14:24 x
    60109112 printlayouts 1 0 6 2006.09.07 19:17:18 x
    60109112 tariff_data 89 0 4 2006.09.07 19:17:42 x
    60109115 sperrlistenm 26 0 0 2006.09.12 15:37:15 x
    60109115 tariff_data 101 0 0 2006.09.12 16:47:53
    60109115 tariff_data 101 0 1 2006.09.13 09:20:15
    60109115 tariff_data 101 0 2 2006.09.13 09:53:32
    60109115 tariff_data 101 0 3 2006.09.13 10:45:45
    60109115 tariff_data 101 0 4 2006.09.13 15:54:22
    60109115 tariff_data 101 0 6 2006.09.13 18:03:32
    60109115 tariff_data 101 0 7 2006.09.13 18:22:46
    60109115 tariff_data 101 0 8 2006.09.14 09:01:10 x
    60119575 tariff_data 99 10 8 2006.09.11 08:17:46
    60119575 sperrlistenm 26 0 0 2006.09.11 19:17:43
    60119575 tariff_data 101 0 0 2006.09.12 19:18:47 x
    60119575 sperrlistenm 27 0 0 2006.09.13 19:17:47 x


    Erklärung die Zeilen mit einem "x" dahinter müssen angezeigt werden, die anderen nicht. Was ich suche ist eine Routine, oder einen SQL-Befehl, der dies ermöglicht.

  • #2
    ...die was ermöglicht? formuliere dein problem etwas besser.

    Kommentar


    • #3
      Die es mir ermöglicht, die markierten Zeilen auszugeben.

      Kommentar


      • #4
        Kann da aber kein Muster erkennen. Formuliere bitte, wonach genau ausgewählt werden soll.

        Kommentar


        • #5
          Code:
          SELECT ... FROM ... WHERE `letzte_spalte` = 'x'

          Kommentar


          • #6
            Das Muster wonach gesucht werden soll ist:

            Zu jedem Gerät (Seriennummer) soll das neueste Paket (tariff_data, printlayouts) angezeigt werden. Wenn auf dem Gerät verschiedene Pakete installiert sind, so soll von jedem Paket das neueste angezeigt werden. Also tariff_data und printlayouts



            x ist nur eine Markierung, existiert nicht in der DB

            Kommentar


            • #7
              Wie ist denn überhaupt Dein bisheriger Ansatz? Hast schon diesen Thread gelesen?

              Kommentar


              • #8
                sorry, deine x stimmen nicht. bei printlayouts gibt es zwei x, bei sperrlistenm drei x, bei tariffdata sogar vier x.

                ich nehme mal an printlayout sperrlistenm und tariffdata seien 'Geräte'. Soviel zur Fragenstellung.

                Kommentar


                • #9
                  wahrscheinlich reicht ein
                  Code:
                  SELECT UNIQE *, 'x' FROM einer_tabelle GROUP BYE install 
                  ORDER BYE install, datum AND uhrzeit
                  völlig aus.

                  Inklusive 'x' und einen neuen thread für ... is not a resource....

                  Kommentar


                  • #10
                    meine 'x' stimmen, denn es dürfen mehrere mit dem gleichen install sein, da es ja verschiedene geräte (seriennummern) sind.


                    das ist ja auch mein problem, nur den neuesten instalL (tariff, printlayout) von jedem gerät anzeigen.


                    und die 'x' sind nur dahinter gemalt, um zu zeigen, welchen sachen seien sollen, die 'x' existieren NICHT in der DB.

                    Kommentar


                    • #11
                      Hallo Cyberphantom,

                      zwei Stichworte für dich:
                      - group by
                      - max

                      Kommentar


                      • #12
                        Würde das ja gerne mit max und group by machen, aber wie? Mein Ansatz war:

                        Code:
                        SELECT `seriennummer`,`install`,`major`,`minor`,`build`,max(`datum`) FROM `optima_installed` GROUP BY `seriennummer`, `install`,`datum`;
                        Da bekomme ich aber nicht das raus, was raus soll.

                        Kommentar


                        • #13
                          Hallo Cyberphantom,

                          ich habe kurz drüber nachgedacht. Ich befürchte fast, das von dir Geforderte ist mit SQL nicht so einfach umsetzbar.

                          mit T-SQL, einer SP oder ein bisschen PHP-Code kriegst du's aber hin. Ein kleiner Ansatz:

                          1. Hole dir alle Werte der Spalte "Install" mit distinct aus der Tabelle
                          2. Bau dir eine Schleife für alle Datensätze aus 1
                          3. Lese dir mit select...top(1) und einer Sortierung auf Datum und Uhrzeit die Werte aus Install (wichtig: Einschränkung durch den jeweiligen Wert aus 1)

                          Grüße
                          Peter

                          Kommentar


                          • #14
                            ich glaube solche Probleme löst man mit subquery. Es hat Beispiele im mysql
                            Manual, wo der Verkäufer jeder Region gesucht wird, welcher den maximalen Umsatz macht. Die
                            hier vorliegende Frage ist genau dasselbe.
                            Zuletzt geändert von sternm; 27.09.2006, 18:51.

                            Kommentar


                            • #15
                              Ich habe jetzt nicht im MySQL-Manual nachgelesen, aber ich bin mir ziemlich sicher, dass sich das Beispiel dort von dieser Problemstellung darin unterscheidet, dass die Tabellen normalisiert sind.
                              Wäre das hier der Fall, wäre die Abfrage leichter und das Design wäre besser. Aber darum geht es hier wohl grad nicht.. ;-)

                              Kommentar

                              Lädt...
                              X