/ / मैं एक ही कॉलम में विभिन्न श्रेणियों में तिथियों के बीच अंतर की गणना कैसे कर सकता हूं? - sql, google-bigquery, झांकी

मैं उसी कॉलम में तिथियों के बीच अंतर की गणना कैसे कर सकता हूं लेकिन विभिन्न श्रेणियां? - एसक्यूएल, गूगल-लाइकरी, टेबलौ

मुझे यकीन है कि कोई इंगित करेगा कि यह एक मूल पुनर्वसन समस्या है, लेकिन मुझे लगता है कि मैं Googling पर गरीब हूं, इसलिए मैं अपने सवाल को स्टैक ओवरफ्लो के देवताओं के लिए पेश कर रहा हूं।

मेरी समस्या यह है कि मैं संख्या की गणना करना चाहता हूंदो तिथियों (रैंक 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

आदर्श रूप से, मैं इसे झांकी में करना चाहता था, लेकिन 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 में है मानक एसक्यूएल


उत्तर № 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