Announcement

Collapse
No announcement yet.

Abfrage aktuellster Jahresstatistik

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

  • Abfrage aktuellster Jahresstatistik

    Hallo zusammen.

    Ich habe ein Problem, und zwar habe ich eine Tabelle, in der Schulen mit ID und Name stehen


    Code:
    Tabellenname: Verzeichniss
    
    NR   Name        Land
    1    Schule 1    Deutschland
    2    Schule 2    Deutschland
    4    Schule 4    Deutschland
    Diese Schulen geben jedes Jahr eine Statistik ab, so dass die andere Tabelle so aussieht:

    Code:
    Tabellenname: Jahresstatistiken
    
    NR  SchulNR  Statistikjahr  Lehrergesamt Schülergesamt
    1   1        2006           12           260
    2   2        2006           23           500
    3   1        2007           23           235
    4   1        2008           120          3467
    5   3        1999           13           452
    6   3        2004           23           768
    Jetzt hab ich ne Abfrage gemacht, die mir immer die Aktuellste Statistik gibt, wenn die Schule in der Verzeichnissliste steht:
    Code:
    SELECT 
       SchulNR, MAX(Statistikjahr) 
    FROM 
       Jahresstatistik 
    WHERE 
       SchulNR IN (SELECT NR FROM verzeichniss) 
    GROUP BY 
       NR
    
    NR  MAX(Statistikjahr)
    1   2008
    2   2006
    So weit, so gut. Ging relativ schnell. Jetzt will ich aber noch alle anderen Werte der Jahresstatistik haben, wodurch das GROUP BY nicht mehr funktioniert.

    Habe jetzt mit nem CONCAT die NR und das Statistikjahr zusammengeführt, und wähle aus den Jahresstatistiken jetzt alle Spalten aus, deren CONCAT-Wert mit dem der anderen Abfrage übereinstimmt

    Code:
    SELECT
       *
    FROM 
       Jahresstatistiken
    WHERE 
       CONCAT(CONCAT(SchulNR, ' '), Statistikjahr) IN 
       (
          SELECT 
             CONCAT(CONCAT(SchulNR, ' '), MAX(Statistikjahr))
          FROM 
             Jahresstatistiken 
          WHERE 
              SchulNR IN (SELECT NR FROM verzeichniss) 
          GROUP BY 
             NR
       )

    Das funktioniert auch, ist aber irgendwie meiner meinung nach nicht sehr schick, und könnte bestimmt besser gelöst werden, da ich aber schon zu lange über dem Problem hänge, komme ich da einfach nicht weiter.

    Sieht da jemand auf anhieb ne bessere Lösung?

    MfG
    Uplink

  • #2
    Könnte mit Limitierung klappen
    welches DBMS?

    Comment


    • #3
      Hallo,

      das Zauberwort heißt Subselect, bzw. Inline-View:
      [highlight=sql]
      select v.NR, v.Name, v.Land,
      s.Statistikjahr, s.Lehrergesamt, s.Schülergesamt
      from Verzeichniss v
      inner join Jahresstatistiken s on s.SchulNR = v.NR
      where s.Statistikjahr = (
      select max(i.Statistikjahr)
      from Jahresstatistiken i
      where i.SchulNR = s.SchulNR
      )
      [/highlight]
      oder
      [highlight=sql]
      select v.NR, v.Name, v.Land,
      s.Statistikjahr, s.Lehrergesamt, s.Schülergesamt
      from Verzeichniss v
      inner join (
      select SchulNR, max(Statistikjahr) Statistikjahr, Lehrergesamt, Schülergesamt
      from Jahresstatistiken
      group by SchulNR, Lehrergesamt, Schülergesamt
      ) s on s.SchulNR = v.NR
      [/highlight]

      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

      Working...
      X