Announcement

Collapse
No announcement yet.

Select Befehl mit Max

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Select Befehl mit Max

    Hallo Ihr,

    ich bin zum ersten mal hier im Forum und habe gleich eine Frage.
    Ich habe viel im Internet gesucht, aber irgendwie weiss ich nicht wie ich danach suchen soll. Vielleicht könnt ihr mir helfen.

    Folgendes:

    Ich habe 3 Tabellen.

    tblManufacturer(id, manuName),
    tblProductFamily(id, familyName, manuID),
    tblProduct(productName, familyID, month, monthBalance)

    Natürlich sind die Verbindungen zwischen den Tabellen vorhanden.

    month wird immer weiter hochgezählt, wenn die kombination productName und familyID bereits vorhanden ist. Diese 3 stellen sind also quasi Unique.

    Die tblProduct könnte also wie folgt aussehen:
    Code:
    Product1    1    1    200
    Product1    1    2    200
    Product1    1    3    2001
    Product2    1    1    1
    usw
    Wenn ich über einen Insert Befehl in die Tabellen reinschreibe wird alles super gemacht und das Ergebnis ist dann auch wie ich mir das vorstelle.

    Jetzt das Problem.
    Ich weiss natürlich nicht am Anfang, wie viele Monate ich pro productName habe. Es kann sein das da 10 Monate drin sind, oder aus 20. Das finde ich auch über Max raus, auch ok

    Aber was ich brauche ist:
    ManuName, FamilyName, ProductName, und monthBalace von den letzten 2 Monate (Max und Max -1)

    Das ergebnis wäre
    Code:
    manuName   familyName   productName   currentMontBalance   lastMonthBalance
    Das wenn möglich in nur einem Befehl, da die DB vielleicht 100.000 einträge haben wird und ich nicht mehrmals die ganze DB durchgehen will, wenn es vielleicht mit einem Befehl geht.

    Ein SELECT Befehl um nur ManuName, FamilyName, ProductName ist nicht schlimm, so wie auch ein Max für die einzelnen Produkten rausfinden. Aber den MonthBalance in Verbindung mit dem Product und mit dem Max-Month bekomme ich nicht hin. Ich weiss nicht ob mein Gehirn für heute nicht mehr mitmacht oder was los ist.

    Ich hoffe ihr versteht was ich meine und könnt mir helfen.

    Vielen Dank im Vorraus
    Stefan

  • #2
    Hallo,

    Lösungsmöglichkeit findest du hier: Bei "doppelten" Datensätzen nur einen anzeigen
    Wobei du halt nicht nur auf den Letzten, sondern zusätzlich auf den Vorletzten vergleichen mußt.
    Denkanstoß: Der Vorletzte ist der Größte von denen die kleiner als der Letzte sind.

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Hallo, vielen Dank für die Antwort.
      Ich hoffe es ist jemand um die Uhrzeit schon hier der mir helfen kann
      Momentan sieht mein SQL Befehl so aus

      Code:
      SELECT tblManufacturer.manuName, 
                   tblProductFamily.familyName, 
                   tblProduct.productName, tblProduct.month, 
                   tblProduct.monthBalance AS CurrnetBalance
      FROM (tblManufacturer INNER JOIN tblProductFamily 
                ON tblManufacturer.ID = tblProductFamily.manuID)            
                INNER JOIN tblProduct 
                ON tblProductFamily.ID = tblProduct.familyID
      WHERE tblProduct.month = (SELECT max(a.month)
                                                   FROM tblProduct a
                                                   WHERE a.productName = tblProduct.productName 
                                                                 AND a.familyID = tblProduct.familyID);
      Nur ich weiss nicht wie ich LastBalance da reinbringen soll... Kann ich es in dem Befehl noch reinpacken oder muss ich 2 Befehle machen?
      Mit dem Denkanstoß kann ich leider nicht viel anfangen

      Kann mir da jemand helfen?

      Danke
      Stefan

      Comment


      • #4
        So, ich musste jetzt das ganze ein bisschen ändern, anstatt "month" was immer um 1 hochgezählt habe, habe ich jetzt ein Datum. Meine SQL-Query sieht momentan so aus:

        [highlight=sql]select tblManufacturer.manuname, tblProductFamily.familyName, tblProduct.productName, tblProduct.monthbalance
        from (tblmanufacturer inner join tblproductfamily on tblmanufacturer.id = tblproductfamily.manuid) inner join tblproduct on tblproductfamily.id = tblproduct.familyid
        where tblproduct.date between #2010-08-01# and #2010-12-01#[/highlight]

        Das Datum ist ein Filter im Program. 2010-08-01 ist das was der User auswählt, ab wann er ein Report haben will und 2010-12-01 ist heute.

        Das Problem was aber besteht ist das alles so anzuzeigen, dass ich nich 3 Zeilen habe wenn ich 3 Monate habe, sondern 3 extra Spalten

        So eine darstellung beispielsweise:

        Code:
        Manufacutrer   Family       Product     2010-08-01   2010-09-01   2010-12-01
        Hersteller1       Familie1   Produkt1   200                300               201
        Hat jemand eine Idee?

        Danke

        Comment

        Working...
        X