Ich habe die folgende Ansicht:die Berechnung von CASE in der Folge in PostgreSQL verwenden
CREATE OR REPLACE VIEW view_a AS
SELECT distinct p.partid, case when
(SELECT EXTRACT(YEAR FROM age) * 12 + EXTRACT(MONTH FROM age)
FROM age(NOW(), LEAST(pp.createdate)) AS t(age)) AS months_between
<24 then months_between::integer else 24 end as timeframe
FROM ....
WHERE ....;
Diese Ansicht seit diesem Datum createdate
(Zeitstempel des ältesten urkundlich erwähnten Erstellungsdatums pro partid
) und berechnet die Monate vergangen nimmt zu NOW()
gleiche wie here wenn das Ergebnis kleiner als 24 (Monate) getan, was ich will dieses Ergebnis sonst will ich 24.
Diese arbeiten derzeit nicht den AS months_between
in der Mitte des Gehäuses nicht akzeptiert.
Wie kann ich das tun?
EDIT:
Zum Beispiel dieser Abfrage funktioniert:
SELECT distinct p.partid, case when
(SELECT EXTRACT(YEAR FROM age) * 12 + EXTRACT(MONTH FROM age)
FROM age(NOW(), LEAST(pp.createdate)) AS t(age))
<24 then 5 else 24 end as timeframe
FROM ....
WHERE ....;
aber es wird wieder 5 oder 24 und es ist nicht das, was ich will. Ich möchte, dass es den im CASE berechneten Wert zurückgibt.
die Frage vereinfachen im Grunde die Form ist:
case when calculated_value < 24 then calculated_value else 24 end;
Ich mag die calculated_value im Fall zurückkehren können.
Kannst du LEAST hier nicht verwenden? siehe https://www.postgresql.org/docs/8.1/static/functions-conditional.html#AEN12704 –
@RC. Am wenigsten ist das Problem. Siehe die Änderung. – avi
Dann kopieren Sie einfach diese Berechnung zu Ihrem THEN ... ELSE –