2017-01-03 12 views
0

という変数を宣言しようとしていますが、その変数は(end_date - start_date)です。次に、変数NEW_VARIABLEを間隔(date1 + NEW_VARIABLE + interval '1 days')として使用します。SELECTステートメントで変数を宣言する

CREATE TEMPORARY TABLE tmp1_variables AS (
    SELECT 
     '2016-10-29'::date as start_date, 
     dateadd(day,-10,getdate())::date as end_date, 
     '2015-10-31'::date as date1 
     (end_date - start_date) as NEW_VARIABLE 
); 

DROP TABLE IF EXISTS tmp_tbl1; 
CREATE TEMPORARY TABLE tmp_tbl1 (cobrand_id int, xsum numeric(30,15)); 

insert into tmp_tbl1 (cobrand_id, xsum) 
select q1.cobrand_id, q1.a/q2.d as xsum from (
    SELECT cobrand_id, sum(calc) AS a FROM jwn_calc s, tmp1_variables 
    where s.optimized_transaction_date > start_date AND s.optimized_transaction_date <= end_date + interval '1 days' GROUP BY cobrand_id 
) as q1 
inner join (
    SELECT cobrand_id AS c, 
    sum(CASE WHEN optimized_transaction_date > date1 AND optimized_transaction_date <= date1 + NEW_VARIABLE + interval '1 days' THEN Calc END)/
    sum(CASE WHEN optimized_transaction_date > date1 AND optimized_transaction_date <= date1 + interval '91 days' THEN Calc END) AS d 
    FROM jwn_calc, tmp1_variables 
    GROUP BY cobrand_id 
) as q2 on q1.cobrand_id = q2.c; 
+1

サンプルデータと望ましい結果は、あなたがしたいことを説明するのに不思議になります。 –

+0

こんにちはGordon、私は望む結果を求めるのではなく、この構文を修正することを考えていました。同じselect文で変数end_dateとstart_dateを作成したとき、どうすれば(end_date - start_date)を変数として宣言できますか?これは可能ですか? – ZJAY

答えて

0

SQLで変数がすべてではありません。テーブル、列、式だけ。 もちろん、変数を宣言することはできません。間違った用語は簡単に不適切なアプローチを促します...

また、dateadd()getdate()?あなたはMS SQL Serverを考えているかもしれません。これらの関数はPostgresには存在しません。

いずれかの方法で、一定の入力から新しい表現を構築するために、サブクエリ(またはCTE)を使用します。

CREATE TEMP TABLE tmp1_variables AS (
SELECT *, end_date - start_date AS new_variable 
FROM (
    SELECT date '2016-10-29' AS start_date 
     , CURRENT_DATE - 10 AS end_date 
     , date '2015-10-31' AS date1 
    ) sub 
); 

有効なPostgresの構文を表示します。

Postgresでは、integerdate(またはtimestampではなく)に追加/削除するだけで済みます。
dateintervalを追加すると、timestampとなります。

(date1 + new_variable + interval '1 days')::date 

をむしろで開始するdateを計算:もちろん

、あなたがdateに戻って結果をキャストすることができます脇

date1 + new_variable + 1 

:引用符で囲まれていない識別子は、Postgresの中に小文字にキャストされています。

関連する問題