わかりました、私はこのような何かが動作する必要のあるいくつかの赤方偏移のドキュメントを見て:
DATEDIFF http://docs.aws.amazon.com/redshift/latest/dg/r_DATEDIFF_function.html
共通テーブル式http://docs.aws.amazon.com/redshift/latest/dg/r_WITH_clause.html
DATEADD http://docs.aws.amazon.com/redshift/latest/dg/r_DATEADD_function.html
WITH cteData AS (
SELECT
CAST(2384105 AS INTEGER) AS Subscription_ID
,CAST('2016-01-01' AS DATE) AS Start_Date
,CAST('2016-06-01' AS DATE) AS End_Date
,CAST(500 AS INTEGER) AS Monthly_revenue
)
,cteTally AS (
SELECT 0 AS TallyNum
UNION ALL
SELECT 1
UNION ALL
SELECT 2
UNION ALL
SELECT 3
UNION ALL
SELECT 4
UNION ALL
SELECT 5
UNION ALL
SELECT 6
UNION ALL
SELECT 7
UNION ALL
SELECT 8
UNION ALL
SELECT 9
UNION ALL
SELECT 10
UNION ALL
SELECT 11
)
SELECT
Subscription_ID
,DATEADD(month,c.TallyNum,t.Start_date) AS "Month"
,Monthly_revenue
FROM
cteData t
INNER JOIN cteTally c
ON DATEDIFF(month,t.Start_Date,t.End_Date) >= c.TallyNum
これは、あなたのために働くことgenerate_series()またはrecursive cteを使用しません。これは私がSQLフィドル(http://sqlfiddle.com/#!15/f3a23/7/0)でこれを試してみましたPostgresSQLのバージョンです....
CREATE TABLE Tbl (
Subscription_ID INTEGER
,Start_Date DATE
,End_Date DATE
,Monthly_revenue INTEGER);
INSERT INTO Tbl (Subscription_ID, Start_Date, End_Date, Monthly_revenue)
VALUES (2384105,'2016-01-01','2016-06-01',500);
WITH cteTally AS (
SELECT 0 AS TallyNum
UNION ALL
SELECT 1
UNION ALL
SELECT 2
UNION ALL
SELECT 3
UNION ALL
SELECT 4
UNION ALL
SELECT 5
UNION ALL
SELECT 6
UNION ALL
SELECT 7
UNION ALL
SELECT 8
UNION ALL
SELECT 9
UNION ALL
SELECT 10
UNION ALL
SELECT 11
)
SELECT
Subscription_ID
,(t.Start_Date + (c.TallyNum * '1 month'::INTERVAL)) as "Month"
,Monthly_revenue
FROM
Tbl t
INNER JOIN cteTally c
ON (
(DATE_PART('year', t.End_Date) - DATE_PART('year', t.Start_Date)) * 12
+
(DATE_PART('month', t.End_Date) - DATE_PART('month', t.Start_Date))
) >= c.TallyNum
;
赤方偏移は、任意の2つの与えられた日付の間の日数を生成するために、再帰CTEのをサポートしていません。あなたはすべての月と年の組み合わせのテーブルがありますか? –
再帰的なcteなしではまだ集計テーブルでそれを行うことができます – Matt
これは伝統的にPostgreSQLで 'generate_series()'を使って行いますが、RedShiftはこれを持っていない古いバージョンに基づいています。これは、いくつかの代替メソッドが役立つかもしれません:http://stackoverflow.com/questions/22759980/generate-series-in-redhsift/34167753#34167753 – Nicarus