/ / Come posso calcolare la differenza tra le date nella stessa colonna ma diverse categorie? - sql, google-bigquery, tableau

Come posso calcolare la differenza tra le date nella stessa colonna ma diverse categorie? - sql, google-bigquery, tableau

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 № 1

Prova 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