[lug-ld] SQL anyone?
Klaus Wünschel
kwj at gmx.de
Di Feb 25 23:54:55 CET 2014
Der Code zur Errechnung der Variablen wird, soweit ich das verstanden habe, in der Reihenfolge ausgeführt, in der MySQL die Ergebnismenge abruft. Diese wäre in meinem Beispiel durch die Sortierung des inneren Selects vorgegeben (ORDER BY...). Wie ist dein inneres Select sortiert?
Gruß
Klaus
"Ekki Plicht (DF4OR)" <ekki at plicht.de> schrieb:
>Ja, das mit dem Jahr habe ich auch gesehen. Ich habe mir so geholfen
>das ich die Abfrage erstmal anur auf ein Jahr beschränkt habe :) So
>laufen die Tests auch schneller, immerhin sind in den echten Tabellen
>ca. eine Million Einträge drin. Da dauert eine Abfrage nervend lange
>zum Testen.
>
>
>Mein Problem ist, das der Rank noch nicht hinhaut. Du inkrementierst
>den Rank, wenns die gleiche Woche ist, aber unabhängig von der Summe.
>Dadurch wird der Rang absolut zufällig vergeben, bzw. (ich spekuliere)
>in der Reihenfolge in der die Zeilen chronologisch vor dem Sortieren
>aus der Tabelle kommen.
>
>Ich mache das jetzt so, das ich im Inner Select erstmal nur die
>gruppierte Liste ausgeben lasse, sortiert nach Woche ASC und Summe
>DESC. Das Outer select vergibt dann einen Rang indem es einfach
>raufzählt, und nur jeweils die ersten 5 haben will. Mal gucken ob das
>so geht...
>
>Gruß,
>Ekki
>
>
>
>2014-02-25 22:37 GMT+01:00 Klaus Wünschel <kwj at gmx.de>:
>> Hallo Ekki,
>>
>> was bei der MySQL-Variante spontan auffällt: Natürlich ist die
>> Gruppierung nach Woche ohne Berücksichtigung des Jahres Quatsch, da
>man
>> so die Wochen verschiedener Jahre in einen Topf wirft. Statt
>> week(datum) kannst du da date_format(datum, '%w.%Y') nehmen:
>>
>> http://sqlfiddle.com/#!2/5433c/6
>>
>> Ansonsten können wir bei Bedarf ja nochmal was "fiddeln" ;-)
>>
>> Gruß
>> Klaus
>>
>> Am Tue, 25 Feb 2014 21:54:41 +0100
>> schrieb "Ekki Plicht (DF4OR)" <ekki at plicht.de>:
>>
>>> Und nochmal ich... :)
>>>
>>> Zu früh gefreut :(
>>>
>>> Leider tut die Abfrage doch nicht das was sie soll, sorry. Aber ich
>>> denke ich habe damit erstmal genug Hinweise bekommen, wie man sowas
>>> grundsätzlich löst und werde von da aus mal alleine weiterbasteln.
>>>
>>> Danke nochmal!
>>>
>>> Ekki
>>>
>>>
>>> 2014-02-19 14:46 GMT+01:00 Klaus Wünschel <kwj at gmx.de>:
>>> > Hallo Christoph,
>>> >
>>> > das Ranking der Artikel innerhalb des Monats fehlt noch, um
>>> > jeweils die 5 Topseller herauszufiltern. Hier das angepasste
>>> > Statement:
>>> >
>>> > http://sqlfiddle.com/#!2/5433c/3
>>> >
>>> > Ginge alles viel eleganter, wenn's nicht MySQL wäre:
>>> >
>>> > http://sqlfiddle.com/#!4/7238e/16
>>> >
>>> > Gruß
>>> > Klaus
>>> >
>>> > Am Wed, 19 Feb 2014 12:54:52 +0100
>>> > schrieb Christoph Maya <christoph.maya at gmail.com>:
>>> >
>>> >> Eii, der generiert immer neue Links :)
>>> >> http://sqlfiddle.com/#!2/15f8c7/1
>>> >>
>>> >>
>>> >> 2014-02-19 12:35 GMT+01:00 Christoph Maya
>>> >> <christoph.maya at gmail.com>:
>>> >>
>>> >> > Glaube das passt: http://sqlfiddle.com/#!2/e1129b/1
>>> >> >
>>> >> > Aber nur schnell zusammen gefrickelt (=
>>> >> >
>>> >> > Grüße
>>> >> >
>>> >> >
>>> >> > 2014-02-19 9:43 GMT+01:00 Christoph Maya
>>> >> > <christoph.maya at gmail.com>:
>>> >> >
>>> >> > Hallo Ekki,
>>> >> >>
>>> >> >> wenn ich es richtig verstehe, sollte es mit GROUP BY und
>HAVING
>>> >> >> gehen: http://www.sqldocu.com/four/groupby.htm#having
>>> >> >>
>>> >> >> Ansonsten: können wir heute Abend mal Live hacken? Hab so was
>>> >> >> ähnliches mal gemacht, nur ohne Join. Da ich auch kein SQL Pro
>>> >> >> bin, hab ich mich Stück für Stück "ran getastet", bis die
>>> >> >> richtigen Ergebnisse da waren :)
>>> >> >>
>>> >> >> Bzw. geb uns mal ein SQL Fiddle: http://sqlfiddle.com/ dann
>>> >> >> können alle gleichzeitig hacken (=
>>> >> >>
>>> >> >> Grüße
>>> >> >>
>>> >> >>
>>> >> >> 2014-02-18 23:43 GMT+01:00 Klaus Wünschel <kwj at gmx.de>:
>>> >> >>
>>> >> >> Hallo Ekki,
>>> >> >>>
>>> >> >>> das ist bitter ;-) Vielleicht hilft dir der folgende Artikel,
>>> >> >>> um das Problem auf "MySQL-Art" zu lösen:
>>> >> >>>
>>> >> >>> http://www.sqlines.com/mysql/how-to/get_top_n_each_group
>>> >> >>>
>>> >> >>> Gruß
>>> >> >>> Klaus
>>> >> >>>
>>> >> >>> "Ekki Plicht (DF4OR)" <ekki at plicht.de> schrieb:
>>> >> >>> >Hi Klaus,
>>> >> >>> >tja, da habe ich wohl Pech gehabt. Es handelt sich um MySQL
>:)
>>> >> >>> >
>>> >> >>> >Gruß,
>>> >> >>> >Ekki
>>> >> >>> >
>>> >> >>> >
>>> >> >>> >2014-02-18 19:52 GMT+01:00 Klaus Wünschel <kwj at gmx.de>:
>>> >> >>> >> Hallo,
>>> >> >>> >>
>>> >> >>> >> nur für den Fall, dass es sich bei der verwendeten
>Datenbank
>>> >> >>> >> nicht um MySQL handelt...
>>> >> >>> >>
>>> >> >>> >> Bei PostgreSQL oder Oracle könntest du Window-Functions
>zur
>>> >> >>> >Ermittlung
>>> >> >>> >> des Rangs eines Artikels innerhalb des Monats benutzen,
>z.B.
>>> >> >>> >>
>>> >> >>> >> RANK() OVER (PARTITION BY TO_CHAR(auftragsdatum,
>'WW.YYYY')
>>> >> >>> >> ORDER BY SUM(preis) DESC)
>>> >> >>> >>
>>> >> >>> >> Siehe auch
>>> >> >>> >>
>http://www.postgresql.org/docs/9.1/static/tutorial-window.html
>>> >> >>> >>
>>> >> >>> >> Damit lassen sich viele Sub-Selects auf einfache Weise
>>> >> >>> >> überflüssig machen.
>>> >> >>> >>
>>> >> >>> >> Gruß
>>> >> >>> >> Klaus
>>> >> >>> >>
>>> >> >>> >> Am Tue, 18 Feb 2014 11:44:00 +0000
>>> >> >>> >> schrieb "Wagner, Steffen Tobias"
>>> >> >>> >> <Steffen.Tobias.Wagner at sap.com>:
>>> >> >>> >>
>>> >> >>> >>> Moin,
>>> >> >>> >>>
>>> >> >>> >>> MySQL:
>>> >> >>> >>>
>>> >> >>> >>> zum Thema gruppieren (-> GROUP BY WEEK... & SORT BY
>>> >> >>> >>> WEEK...): z.b.
>>> >> >>>
>>http://stackoverflow.com/questions/6710342/mysql-grouping-by-week
>>> >> >>> >>>
>>> >> >>> >>> Zum Thema Join von mehreren Tabellen (-> INNER JOIN):
>>> >> >>> >>> z.B. http://www.mysqltutorial.org/mysql-inner-join.aspx
>>> >> >>> >>>
>>> >> >>> >>> Deine Anforderung sollte problemlos in einer Abfrage
>>> >> >>> >>> machbar sein.
>>> >> >>> >>>
>>> >> >>> >>> Gruß Steffen
>>> >> >>> >>>
>>> >> >>> >>>
>>> >> >>> >>>
>>> >> >>> >>> From: lug-ld-bounces at lists.lug-ld.de
>>> >> >>> >>> [mailto:lug-ld-bounces at lists.lug-ld.de] On Behalf Of Ekki
>>> >> >>> >>> Plicht (DF4OR) Sent: Dienstag, 18. Februar 2014 12:31 To:
>>> >> >>> >>> Allgemeine Mailingliste der Linux-User-Group Landau
>>> >> >>> >>> Subject: [lug-ld] SQL
>>> >> >>> >anyone?
>>> >> >>> >>>
>>> >> >>> >>>
>>> >> >>> >>> Moin.
>>> >> >>> >>> Ich bräuchte mal Hilfe bei einer SQL-Abfrage.
>>> >> >>> >>>
>>> >> >>> >>> Tabelle 1
>>> >> >>> >>> id, Auftragsnummer, auftragsdatum
>>> >> >>> >>>
>>> >> >>> >>> Tabelle 2
>>> >> >>> >>> Auftrags-id, Artikel, Preis
>>> >> >>> >>>
>>> >> >>> >>> Es gibt also viele Aufträge mit jeweils einer oder
>mehreren
>>> >> >>> >>> Positionen (Artikel).
>>> >> >>> >>>
>>> >> >>> >>> Ich suche nun folgendes Ergebnis :
>>> >> >>> >>> Woche, Artikel, Preis
>>> >> >>> >>>
>>> >> >>> >>> Im Klartext : gruppiert nach Woche alle Artikel die in
>>> >> >>> >>> dieser Woche verkauft wurden, zusammen gefasst die Preise
>>> >> >>> >>> jeden Artikels, sortiert nach den top 5 Artikeln
>>> >> >>> >>>
>>> >> >>> >>> Ich will also wissen:
>>> >> >>> >>> Welche Artikel waren meine Renner (Top 5) je Woche?
>>> >> >>> >>>
>>> >> >>> >>> Geht das überhaupt mit einer Abfrage? Ich habe es mit sub
>>> >> >>> >>> selects probiert aber nicht hingekommen....
>>> >> >>> >>>
>>> >> >>> >>> Danke!
>>> >> >>> >>> Ekki
>>> >> >>> >>
>>> >> >>> >> _______________________________________________
>>> >> >>> >> lug-ld mailing list
>>> >> >>> >> lug-ld at lists.lug-ld.de
>>> >> >>> >> http://lists.lug-ld.de/mailman/listinfo/lug-ld
>>> >> >>> >_______________________________________________
>>> >> >>> >lug-ld mailing list
>>> >> >>> >lug-ld at lists.lug-ld.de
>>> >> >>> >http://lists.lug-ld.de/mailman/listinfo/lug-ld
>>> >> >>>
>>> >> >>> _______________________________________________
>>> >> >>> lug-ld mailing list
>>> >> >>> lug-ld at lists.lug-ld.de
>>> >> >>> http://lists.lug-ld.de/mailman/listinfo/lug-ld
>>> >> >>>
>>> >> >>
>>> >> >>
>>> >> >
>>> >
>>> > _______________________________________________
>>> > lug-ld mailing list
>>> > lug-ld at lists.lug-ld.de
>>> > http://lists.lug-ld.de/mailman/listinfo/lug-ld
>>> _______________________________________________
>>> lug-ld mailing list
>>> lug-ld at lists.lug-ld.de
>>> http://lists.lug-ld.de/mailman/listinfo/lug-ld
>>
>> _______________________________________________
>> lug-ld mailing list
>> lug-ld at lists.lug-ld.de
>> http://lists.lug-ld.de/mailman/listinfo/lug-ld
>_______________________________________________
>lug-ld mailing list
>lug-ld at lists.lug-ld.de
>http://lists.lug-ld.de/mailman/listinfo/lug-ld