私は、これが基本的な作り直しの問題であることを誰かが指摘すると確信していますが、私はGooglingが苦手なので、Stack Overflowの神々に私の質問を申し出ます。
私の問題は私が数を計算したいということです同じ列から来るが別の列(Rank)で異なる値を持つ2つの日付(ランク1と2の間)の間の日数。これがデータセットスキーマの例です。
User Date Rank
Bob 2016-12-01 3
Bob 2016-12-07 2
Bob 2016-12-10 1
私が望むのはこれです:
User Date1 Date2 DaysBetween
Bob 2016-12-07 2016-12-10 3
理想的には、これをTableauで行いたいのですが、SQL / BigQueryも問題ありません。
回答:
回答№1は1以下を試してください
WITH YourTable AS (
SELECT "Bob" AS User, DATE "2016-12-01" AS Date, 3 AS Rank UNION ALL
SELECT "Bob" AS User, DATE "2016-12-07" AS Date, 2 AS Rank UNION ALL
SELECT "Bob" AS User, DATE "2016-12-10" AS Date, 1 AS Rank
)
SELECT
User,
MAX(CASE WHEN Rank = 2 THEN Date END) AS Date1,
MAX(CASE WHEN Rank = 1 THEN Date END) AS Date2,
DATE_DIFF(MAX(CASE WHEN Rank = 1 THEN Date END),
MAX(CASE WHEN Rank = 2 THEN Date END), DAY) AS DaysBetween
FROM YourTable
GROUP BY User
注 - これはBigQueryにあります 標準SQL
回答№2の場合は1
別のオプション
WITH YourTable AS (
SELECT "Bob" AS User, DATE "2016-12-01" AS Date, 3 AS Rank UNION ALL
SELECT "Bob" AS User, DATE "2016-12-07" AS Date, 2 AS Rank UNION ALL
SELECT "Bob" AS User, DATE "2016-12-10" AS Date, 1 AS Rank
)
SELECT
User, Date1, Date2,
DATE_DIFF(Date2, Date1, DAY) AS DaysBetween
FROM (
SELECT
User, Rank, Date as Date2,
LEAD(Date) OVER(PARTITION BY User ORDER BY Date DESC) AS Date1
FROM YourTable
)
WHERE Rank = 1