3

クエリがあり、クエリの結果を他のクエリで使用する必要があります。それで、「WITH .. As」を使いました。問題は、一時変数がテキスト データ型で自動的に作成されたときに整数でなければならないことです。整数データ型の変数を持つようにコードを変更または修正する方法。

WITH A as (
SELECT ambtemp,
       date_trunc('hour', dt)+
       CASE WHEN date_part('minute', dt) >= 30
            THEN interval '30 minutes'
            ELSE interval '0 minutes'
       END as t
FROM temm),

B as(
SELECT ambtemp,t,

       max(ambtemp) OVER (PARTITION BY t) as max_temp,
       min(ambtemp) OVER (PARTITION BY t) as min_temp
FROM A)
SELECT *

FROM B
WHERE (max_temp - min_temp) <= 0.2

max_temp と min_temp は、テキスト形式である間は整数データ型で構築する必要があります。

4

2 に答える 2

4

ありがとう、@ Igor Romanchenko

WITH A as (
SELECT ambtemp,
       date_trunc('hour', dt)+
       CASE WHEN date_part('minute', dt) >= 30
            THEN interval '30 minutes'
            ELSE interval '0 minutes'
       END as t
FROM temm),

B as(
SELECT ambtemp,t,

       max(ambtemp::float(23)) OVER (PARTITION BY t) as max_temp,
       min(ambtemp::float(23)) OVER (PARTITION BY t) as min_temp
FROM A)
SELECT *

FROM B
WHERE (max_temp - min_temp) <= 0.2
于 2012-11-26T18:32:08.100 に答える
2

::タイプを変更するには、演算子を使用してキャストする必要があります。したがって、整数を文字列に変換するには、次のようにしますmyCol::Text

あなたの特定のケースでは、逆のことをしています:

 max(ambtemp) OVER (PARTITION BY t) as max_temp::int,
 min(ambtemp) OVER (PARTITION BY t) as min_temp::int

次の方法で null を確認することができます。

NULLIF(your_value, '')::int

また、整数に変換できない値にも注意します。

キャストと型の詳細については、PostgreSQL のドキュメントを参照してください。

于 2012-11-26T15:48:30.567 に答える