[lug-ld] SQL anyone?

Ekki Plicht (DF4OR) ekki at plicht.de
Di Feb 25 22:46:36 CET 2014


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