Announcement

Collapse
No announcement yet.

2 Tabellen Top 15 pro Gruppe

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

  • 2 Tabellen Top 15 pro Gruppe

    Hallo zusammen! Also ich habe ein problem versuche jetzt schon einpaar Studen das zu lösen aber ich kriege einfach nicht das richtige zusammen.

    Es geht darum:
    Ich habe 2 Tabellen und möchte gerne die ersten 15 nach Datum ausgeben.

    Vorhanden:
    Tabelle1:
    table_id time value
    1 2010-05-07 11:00.000 3.00
    1 2010-05-07 12:00.000 4.25
    1 2010-05-07 13:00.000 6.00
    2 2010-05-07 14:00.000 4.00
    3 2010-05-07 15:00.000 4.55
    4 2010-05-07 16:00.000 1.25
    5 2010-05-07 11:00.000 1.58
    5 2010-05-07 12:00.000 1.21
    5 2010-05-07 13:00.000 5.58
    ....

    Tabelle2:
    table_id Ort
    1 Berlin
    2 Zürich
    3 New York
    4 Idontknow
    5 Paris

    so und die Ausgabe die ich gern möchte ist: ( hier halt mal die ersten 4 (anstatt 15) einträge nach Datum pro Gruppe)
    table_id Ort time value
    1 Berlin 2010-05-07 11:00.000 3.00
    1 Berlin 2010-05-07 12:00.000 4.25
    1 Berlin 2010-05-07 13:00.000 6.00
    1 Berlin 2010-05-07 14:00.000 4.00
    2 Zürich 2010-05-07 14:00.000 5.58
    2 Zürich 2010-05-07 14:00.000 2.00
    2 Zürich 2010-05-07 14:00.000 4.00
    2 Zürich 2010-05-07 14:00.000 5.55

    Es gibt etwa 7'000 Records und möchte gern halt die ersten 15 vom Datum von jeder Gruppe

    Geht das überhaupt? Was ich bis jetzt so verucht habe sieht etwa so aus.

    --------------------------------
    SELECT t2.table_id,
    t2.Ort,
    t1.time,
    t1.value
    FROM Tabelle2 AS t2 INNER JOIN Tabelle1 AS t1
    ON t2.table_id = I.table_id
    WHERE t1.zeit In (SELECT TOP 15 t1.zeit
    FROM Tabelle2
    WHERE t2.ort = ort
    ORDER BY DESC)
    ORDER BY target, t1.zeit
    ---------------------------------

    bei mir gibt es alle Daten aus oder Fehler ich hab schon soviel rumgeschraubt hoffe ich hab nicht schon ganz verkackt.

    Wäre toll wenn mir jemand helfen könnte

    Danke schonmal
    Zuletzt editiert von Mike_; 04.06.2010, 15:00.

  • #2
    Niemand eine Idee :? Ich hab nochmal einwenig rumprobiert aber scheint immer noch nicht zu funktionieren

    Comment


    • #3
      Schreib bitte noch Dein konkretes DBRMS dazu (Oracle, SQL Server, ...) dazu. Denn die "Top" Funktionen sind die jeweiligen Hersteller anders.

      Comment


      • #4
        ah natürlich uhm ich hab hier einen MS SQL 2005 uhm da merk ich gerade da hätte ich es wohl auch gleich ins richtige Unterforum reinmachen können. Sorry!

        Comment


        • #5
          Bei MSSQL2005 schau die mal ROW_NUMBER () OVER (PARTITION BY .... ORDER BY ...) an...

          Comment


          • #6
            Uhm danke ebis für den Anhaltspunkt hab schon bissl rumprobiert aber bis jetzt noch nich so geglückt, ich bin leider nicht so der über SQL guru hehe. Mal sehen ob ich es noch hinkrieg =)

            Comment


            • #7
              Hallo mike,

              das wirft Dir die ersten 2 nach Datum je Gruppe aus; da noch die Orte ran zu joinen wird nicht mehr das Problem sein.

              [highlight=SQL];WITH cte (Grp, Datum, RwNr) AS
              (SELECT GRP, Datum
              ,ROW_NUMBER() OVER (PARTITION BY Grp, CONVERT(varchar(10), Datum, 120)
              ORDER BY Grp, Datum) AS RwNr
              FROM
              (SELECT 1 AS Grp, CONVERT(datetime, '2010-05-07 11:00.000') As Datum
              UNION ALL SELECT 1, '2010-05-07 12:00.000'
              UNION ALL SELECT 1, '2010-05-07 13:00.000'
              UNION ALL SELECT 1, '2010-05-08 13:00.000'
              UNION ALL SELECT 2, '2010-05-07 14:00.000'
              UNION ALL SELECT 3, '2010-05-07 15:00.000'
              UNION ALL SELECT 4, '2010-05-07 16:00.000'
              UNION ALL SELECT 5, '2010-05-07 11:00.000'
              UNION ALL SELECT 5, '2010-05-07 12:00.000'
              UNION ALL SELECT 5, '2010-05-07 13:00.000'
              ) AS SUB
              )
              SELECT *
              FROM cte
              WHERE RwNr <= 2[/highlight]
              Olaf Helper

              <Blog> <Xing>
              * cogito ergo sum * errare humanum est * quote erat demonstrandum *
              Wenn ich denke, ist das ein Fehler und das beweise ich täglich

              Comment


              • #8
                Nun vielen Dank für deine Einsatz habe es schon ausprobiert funktioniert auch teilweise. Muss noch ein wenig rumprobieren. Natürlich kann sich die Zeit sehr ändern 0:00-23:59, also da geht alles, sorry wenn ich das nicht so klar gesagt habe. Wie schon gesagt bin noch nicht so bewandert in SQL aber man lernt viel dazu hehe.

                Danke nochmal O. Helper hat auf jeden Fall schon mal weitergeholfen.

                Mike

                Comment

                Working...
                X