私は、次のビューがあります。このビューはcreatedate
(partid
あたりの最古の記録作成日のタイムスタンプ)を受け取り、この日付以降に渡さヶ月を計算は、PostgreSQL
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 ....;
を結果は24(ヶ月)よりも小さい場合here を行って同じNOW()
に私は、そうでない場合は、私が24
これは、現在、それは例途中でAS months_between
を受け入れていない動作しない場合は、この結果が欲しいです。
どうすればいいですか?
EDIT:
たとえば、このクエリは動作します:
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 ....;
しかし、それは、5または24を返し、それは私が欲しいものではありません。私はそれがCASEで計算された値を返すようにしたい。質問を簡素化するために
は、基本的な形式は次のとおりです。
case when calculated_value < 24 then calculated_value else 24 end;
は、私はケースにcalculated_valueを返すことができるようにしたいです。
ここではLEASTを使用できませんか? https://www.postgresql.org/docs/8.1/static/functions-conditional.html#AEN12704 –
@RCを参照してください。 LEASTは問題ではありません。編集を参照してください。 – avi
それから計算をあなたのTHENにコピーしてください。ELSE –