Sono sicuro che qualcuno farà notare che questo è un problema di rimodellamento di base, ma credo di essere povero a Googling, quindi sto offrendo la mia domanda agli dei di Stack Overflow.
Il mio problema è che voglio calcolare il numerodi giorni tra due date (di Rank 1 e 2) che provengono dalla stessa colonna ma hanno valori diversi in un'altra colonna (Rank). Ecco un esempio dello schema del set di dati:
User Date Rank
Bob 2016-12-01 3
Bob 2016-12-07 2
Bob 2016-12-10 1
Quello che vorrei è questo:
User Date1 Date2 DaysBetween
Bob 2016-12-07 2016-12-10 3
Idealmente, volevo farlo in Tableau, ma anche SQL / BigQuery è OK.
risposte:
1 per risposta № 1Prova qui sotto
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
Nota: questo è in BigQuery SQL standard
1 per risposta № 2
Un'altra opzione
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