Case mit group by
am 20.03.2007 16:55:00 von Sebastian Moderlak
Hallo NG,
ich habe folgende Problemstellung:
Die anfolgende Query liefert mir den Eintrag zu der mehrdeutigen fkid mit
dem höchsten Datum max(mydate):
select fkid, max(mydate),
case when PERIOD_DIFF(date_format(now(), "%Y%m"),
date_format(max(mydate), "%Y%m")) <= 6 then 1
when PERIOD_DIFF(date_format(now(), "%Y%m"),
date_format(max(mydate), "%Y%m")) <= 12 then 2
else 3
end as VALUE
from mytable
group by fkid
Ich möchte aber nun gerne noch das Group by um VALUE erweitern, um dann alle
Einträge zu zählen die VALUE 1, 2 oder 3 haben. Jedoch genau da scheitert
es: Can't group on 'VALUE'
Ich komme derzeit einfach nicht drauf. Danke für jeden wertvollen Tipp.
Bas
Re: Case mit group by
am 20.03.2007 17:06:49 von Robert Klemme
On 20.03.2007 16:55, Sebastian Moderlak wrote:
> Hallo NG,
>
> ich habe folgende Problemstellung:
>
> Die anfolgende Query liefert mir den Eintrag zu der mehrdeutigen fkid mit
> dem höchsten Datum max(mydate):
>
> select fkid, max(mydate),
> case when PERIOD_DIFF(date_format(now(), "%Y%m"),
> date_format(max(mydate), "%Y%m")) <= 6 then 1
> when PERIOD_DIFF(date_format(now(), "%Y%m"),
> date_format(max(mydate), "%Y%m")) <= 12 then 2
> else 3
> end as VALUE
> from mytable
> group by fkid
>
> Ich möchte aber nun gerne noch das Group by um VALUE erweitern, um dann alle
> Einträge zu zählen die VALUE 1, 2 oder 3 haben. Jedoch genau da scheitert
> es: Can't group on 'VALUE'
>
> Ich komme derzeit einfach nicht drauf. Danke für jeden wertvollen Tipp.
group by fkid, 3
oder - besser - du wiederholst den CASE-Ausdruck in der GROUP BY-Klausel.
robert
Re: Case mit group by
am 21.03.2007 17:00:56 von Sebastian Moderlak
Hallo Robert,
> group by fkid, 3
Nachdem ich begriffen habe, dass ich mit der 3 den dritten Parameter
anspreche, ging mir ein Lichtlein auf. Das habe ich nämlich noch nie
gesehen.
Es ging zwar leider so noch noch nicht, da meine Query doch etwas komplexer
als meine hier abstrahiert dargestellte - aber nun konnte ich die Lösung
soweit vervollständigen.
Danke für Deine Hilfe.
Bas