Case mit group by

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