also, kleine sache noch:
ich stehe jetzt vor dem problem, das ein “Andreas Kretschmer” 2004 gehabt hat, zumindest laut google…
fogender code:
select city_id, count(id) as bestellungen,
[color=#008000]to_char(submitted_at,'yyyy mm') as wann[/color]
from cart_order where city_id in ( select city_id from (select
sum(case when ( to_char(submitted_at,'yyyy mm')='2011 01') then 1 else 0 end) as anfang,
sum(case when ( to_char(submitted_at,'yyyy mm')='2011 07') then 1 else 0 end) as ende ,
city_id from orders group by city_id ) foo
where anfang>0 and ende>0 order by cast( ende as float)/cast(NULLIF(anfang,0)as float) desc limit 10 )
group by city_id, [color=#008000]wann [/color]
order by [color=#008000]wann[/color],city_id
wobei, wie rot markiert, auch 0 als 0 eingetragen werden soll.
die frage dannach ist auf diversen foren verteilt, aber die antwort habe ich nicht gefunden…
Ihr müsst da mit einbeziehen, das verschiedene Länder die Kalenderwochen anders berechnen.
Eine allgemeingültige Funktion - eingebaut in die Datenbank - kann es da also nicht geben.
Oh, und bezüglich Konferenz: wenn man da hinkommt, dann lernt man natürlich etwas.
Das kannst du doch so deinem Arbeitgeber verkaufen, oder?
Und da ihr PostgreSQL einsetzt, kann von deinem Arbeitgeber auch noch jemand mitkommen.
Und Sponsoringmöglichkeiten bieten wir auch an
ich bin auf der Suche nach der Lösung für ein sehr ähnlich gelagertes Problem auf diesen zugegebenermaßen etwas älteren Thread gestoßen. Das SQL
hat damals das richtige Ergebnis geliefert:
Ich habe nun das Ausgangsdatum 2 Jahre in die Zukunft auf ‘2012-12-25’ gesetzt, und schon ergeben sich die altbekannten Probleme, das Ergebnis lautet nämlich nun:
Wie man sieht, wird hier die erste KW 2013 als erste KW 2012 angegeben, dagegen gibt es keine erste KW 2013.
Mein ursprüngliches Problem besteht darin, dass ich Daten über mehrere Jahre hinweg für Berichte per SQL Query bereitstellen und anschließend mit einem Reporting Tool aufbereiten muss, und diese Daten nach Jahren und KWs zusammengefasst und sortiert sein müssen. Dabei stoße ich immer wieder darauf, dass die letzten Tage eines Jahres mit den ersten Tagen des gleichen Jahres zusammengeworfen werden, sobald die letzten Tage des Jahres in der ersten KW des nächsten Jahres liegen, wie hier der 31.12.2012, der ja bekanntlich wie die folgenden Tage bis zum 06.01.2013 in der ersten KW 2013 liegt.
Bisher habe ich immer mit irgendwelchen Workarounds gearbeitet, musste dafür aber auch jedes Jahr von neuem diese Berichte anfassen und ändern.
Meine Frage nun: gibt es so etwas wie eine allgemeine Lösung in SQL für dieses Problem? Ich meine so etwas wie eine Verknüpfung der Kalenderwoche mit dem richtigen dazugehörenden Jahr?
Das sind meines Wissens die beiden gültigen Standards für die Berechnung der Wochennummer.
select datum,
to_char(datum, 'YYYY_IW') as iso_woche,
to_char(datum, 'YYYY_WW') as woche
from (
select ('2010-12-25'::date + s * interval '1' day)::date as datum
from
generate_series(0,20) s
) t
danke für Deine Antwort, sie liefert jedoch auch falsche (oder vllt besser nicht-richtige?) Ergebnisse.
Teste Dein letztes SQL bitte mal mit dem 25.12.2012 als Ausgangsdatum. Dann taucht die erste KW 2012 als KW für den 31.12.2012 auf, was definitiv nicht richtig ist. Alles andere ist dann wieder soweit ok. Wobei ich gerade sehe, daß Dein Beispiel für den 01.01. und 02.01.2011 das falsche Jahr liefern - und das war eben mein eigentliches Problem.
Ich habe in der Zwischenzeit aber eine Lösung gefunden:
select datum,
to_char(datum, '[color=#ff0000]IYYY_IW[/color]') as iso_woche
from (
select ('2012-12-25'::date + s * interval '1' day)::date as datum
from
generate_series(0,20) s
) t
(Ich habe einfach mal meine Lösung in Dein Beispiel eingebaut.) Dadurch wird das richtige “ISO-Jahr” zur ISO-Woche angegeben. Darauf gekommen bin ich beim x-ten Mal lesen der Doku, ich denke, das ist die Geschichte mit dem Wald und den Bäumen…
Mittlerweile habe ich meine abzuliefernden Berichte auf diese Weise umgestellt, und bis jetzt passen sie - ohne Workarounds !
Das ist richtig, mein Satz bezog sich auf Dein folgendes SQL:
Dort hast Du noch das “normale” ‘YYYY’ für die Ermittlung des Jahres des Datums genutzt, welches zwar das richtige Jahr zum Datum liefert, aber eben das falsche Jahr zur ISO-Woche. Ich hoffe ich habe mich verständlich ausgedrückt.