Ankündigung

Einklappen
Keine Ankündigung bisher.

Werte in einer Spalte addieren bis Wert x erreicht

Einklappen

Neue Werbung 2019

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

  • Werte in einer Spalte addieren bis Wert x erreicht

    Hallo,

    ich müsste solange Zahlen in einer Spalte addieren bis eine bestimmte Zahl erreicht ist und bräuchte dann die ID dieser Zeile.

    Beispiel:

    Tabelle:

    ID / Zahlen
    1 / 5
    2 / 10
    3 / 5
    4 / 20
    5 / 30

    Mein Grenzwert ist 25, somit müsste mir mysql die 4 (ID) ausgeben.

    Hat jemand einen Tipp?

    Gruß und Vielen Dank

  • #2
    Zitat von Jonsibua Beitrag anzeigen
    Hallo,

    ich müsste solange Zahlen in einer Spalte addieren bis eine bestimmte Zahl erreicht ist und bräuchte dann die ID dieser Zeile.

    Code:
    test=*# select * from jon ;
     id | val
    ----+-----
      1 |   5
      2 |  10
      3 |   5
      4 |  20
      5 |  30
    (5 rows)
    
    test=*# select id, val, sum(val) over(order by id) from jon;
     id | val | sum
    ----+-----+-----
      1 |   5 |   5
      2 |  10 |  15
      3 |   5 |  20
      4 |  20 |  40
      5 |  30 |  70
    (5 rows)
    
    test=*# select * from (select id, val, sum(val) over(order by id) from jon) foo where sum <= 25;
     id | val | sum
    ----+-----+-----
      1 |   5 |   5
      2 |  10 |  15
      3 |   5 |  20
    (3 rows)
    
    test=*# select * from (select id, val, sum(val) over(order by id) from jon) foo where sum >= 25;
     id | val | sum
    ----+-----+-----
      4 |  20 |  40
      5 |  30 |  70
    (2 rows)
    
    test=*# select * from (select id, val, sum(val) over(order by id) from jon) foo where sum >= 25 order by id limit 1;
     id | val | sum
    ----+-----+-----
      4 |  20 |  40
    (1 row)
    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

    Kommentar


    • #3
      Suchst du eine Lösung mit PHP, oder eine mit MySQL?
      [URL="http://php.net/manual/en/migration55.deprecated.php"]mysql ist veraltet[/URL] [URL="http://php-de.github.io/jumpto/mail-class/"]Mails senden: Ohne Probleme und ohne mail()[/URL]
      [PHP]echo 'PS: <b>Meine Antwort ist keine Lösung, sondern nur eine Hilfe zur Lösung.</b>';[/PHP]

      Kommentar


      • #4
        Danke Akretschmer, werde deinen Vorschlag morgen gleich versuchen.

        Suche eine Lösung in MySQL.

        Gruß Jonsibua

        Kommentar


        • #5
          Zitat von Jonsibua Beitrag anzeigen
          Danke Akretschmer, werde deinen Vorschlag morgen gleich versuchen.
          Viel Erfolg, weil:

          Suche eine Lösung in MySQL.
          MySQL kann das nicht. Wie so vieles.
          PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

          Kommentar


          • #6
            Danke für die Antwort, bin jetzt auf PHP umgestiegen und werde dort mein Glück versuchen

            Kommentar


            • #7
              Zitat von Jonsibua Beitrag anzeigen
              Danke für die Antwort, bin jetzt auf PHP umgestiegen und werde dort mein Glück versuchen
              Man könnte natürlich auch eine Datenbank nehmen, die zeitgemäß ist. Wäre wohl zu einfach.
              PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

              Kommentar


              • #8
                akretschmer, hab versucht deinen Code in PHP zu verwenden, bekomme aber immer nur eine Fehlermeldung.

                Kommentar


                • #9
                  Das kann zwei Ursachen haben:
                  • Du versuchst diesen SQL-Code tatsächlich als PHP-Code zu verwenden.
                  • Du versuchst diesen Code in einer Datenbank auszuführen und verwendest kein PostgreSQL sondern MySQL.


                  Afaik kann mysql sowas nicht.

                  Kommentar


                  • #10
                    ok, was empfehlt ihr stattdessen, wenn weder PHP noch MySQL funktionieren?

                    Kommentar


                    • #11
                      Das funktioniert mit allem. akretschmer wollte nur mal wieder seinen Postgresql=Gut Mysql=Schlecht Unfug zeigen. Er macht hier die Forenunterhaltung, nur schreibt er das nie in seine Beiträge.

                      Also: Etwas mehr Details. Was soll der Sinn dieser Aufgabe sein? Wieviele Werte hat die DB mit diesen Zahlen? Was hast du schon selbst probiert?
                      Lösungen wären dann z.B., erstmal alle Werte abzufragen und dann in einem Array vergleichen, oder bei jedem Schritt eine Abfrage machen.
                      Windows Server gehören NICHT ins Internet!

                      Dildo? Dildo!

                      Kommentar


                      • #12
                        Zitat von Jonsibua Beitrag anzeigen
                        ok, was empfehlt ihr stattdessen, wenn weder PHP noch MySQL funktionieren?
                        siehe #7.
                        PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                        Kommentar


                        • #13
                          Zitat von akretschmer Beitrag anzeigen
                          MySQL kann das nicht. Wie so vieles.
                          Denke schon:
                          Code:
                          SELECT *
                          FROM (
                              SELECT a.id, (SUM(b.zahlen) + a.zahlen) AS summe_bis
                              FROM <bsp_tab> a
                              JOIN <bsp_tab> b ON (b.id < a.id)
                              GROUP BY a.id
                              HAVING summe_bis > 25
                              ORDER BY summe_bis
                          ) s
                          LIMIT 1

                          Kommentar


                          • #14
                            Zitat von Jonsibua Beitrag anzeigen
                            ok, was empfehlt ihr stattdessen, wenn weder PHP noch MySQL funktionieren?
                            Wer hat hier geschrieben, das es per PHP nicht funktioniert?
                            Die Lösung ist aber so trivial, dass ich diese hier nicht poste.

                            Eine MySQL-Lösung wurde schon gezeigt, und um Andreas etwas zu kitzeln noch eine zweite Lösung mit MySQL hinterher :
                            Code:
                            SET @zsum = 0;
                            SELECT id, @zsum:=@zsum+zahl as s
                            FROM (
                              SELECT id, zahl
                              FROM bsp_tab 
                              ORDER BY id
                            ) t2
                            WHERE @zsum < 25
                            ORDER BY s DESC
                            LIMIT 1

                            Kommentar


                            • #15
                              Hallo,

                              danke für die zahlreichen Antworten

                              Hintergrund ist ich habe 4 Tabellen:

                              1) "AB"
                              Code:
                              Datum / Uhrzeit / Betr. Neg.
                              ...
                              01.06.2014	10:00 - 10:15	0	0	-	
                              01.06.2014	10:15 - 10:30	0	0	-	
                              01.06.2014	10:30 - 10:45	700	0	-	
                              01.06.2014	10:45 - 11:00	1.201,00	0	-	
                              01.06.2014	11:00 - 11:15	0	0	-	
                              ...
                              2) "zmin"
                              Code:
                              ID / Zeitspanne
                              ...
                              1	02:45 - 03:00
                              1	03:00 - 03:15
                              1	03:15 - 03:30
                              1	03:30 - 03:45
                              1	03:45 - 04:00
                              2	04:00 - 04:15
                              2	04:15 - 04:30
                              2	04:30 - 04:45
                              2	04:45 - 05:00
                              3) "zh"
                              Code:
                              ID / Zeitspanne
                              1	NEG_00_04
                              2	NEG_04_08
                              3	NEG_08_12
                              4	NEG_12_16
                              5	NEG_16_20
                              6	NEG_20_24
                              4) "Tag1"
                              Code:
                              Datum / Betr. Neg / Preis / Angebot
                              01.06.2014	NEG_00_04	0		5	
                              01.06.2014	NEG_00_04	18,28		10	
                              01.06.2014	NEG_00_04	18,86		16	
                              01.06.2014	NEG_00_04	19,19		13	
                              01.06.2014	NEG_00_04	21,407	6	
                              01.06.2014	NEG_00_04	21,91		10
                              01.06.2014	NEG_00_04	22		10
                              ...
                              ####

                              Mithilfe von
                              Code:
                              SELECT AB.Datum, zmin.ID, AB.`BETR. NEG`, zmin.Zeitspanne, zh.Zeitspanne
                              FROM AB, zh, zmin
                              WHERE AB.`UHRZEIT`=zmin.`Zeitspanne` AND AB.Datum = '01.06.2014' AND AB.`BETR. NEG` > '0' AND zmin.ID = zh.ID
                              bekomme ich dabei aus AB, zmin, zh diese Ausgabe:

                              Code:
                              Datum / ID / Betr. Neg  / Zeitspanne (zh)
                              01.06.2014	3	30	NEG_00_04
                              01.06.2014	3	120	NEG_08_12
                              01.06.2014	3	501	NEG_08_12
                              01.06.2014	3	902	NEG_08_12
                              01.06.2014	3	501	NEG_08_12
                              Nun fehlt mir in der Ausgabe nur noch für jede Zeile der Preis (Tabelle AB), welcher beim Betr. Neg durch aufsummieren erreicht wird.

                              Beispiel:

                              So solle es am Ende aussehen:

                              Datum / ID / Betr. Neg / Zeitspanne / max. Preis
                              01.06.2014 3 30 NEG_08_12 18,86

                              Wär toll, wenn ihr mir helfen könntet.

                              Gruß
                              Jonas

                              Kommentar

                              Lädt...
                              X