/ /同じ列にあるがカテゴリが異なる日付の違いを計算するにはどうすればよいですか。 - sql、google-bigquery、tableau

同じ列で異なるカテゴリの日付の差異を計算するにはどうすればよいですか? - sql、google-bigquery、tableau

私は、これが基本的な作り直しの問題であることを誰かが指摘すると確信していますが、私は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