博客專欄

        EEPW首頁 > 博客 > 數據科學面試中應該知道的5個SQL日期函數

        數據科學面試中應該知道的5個SQL日期函數

        發布人:數據派THU 時間:2021-09-19 來源:工程師 發布文章

        來源:DeepHub IMBA

        一個優秀的 SQL 開發人員是能夠以他們喜歡的任何方式操作數據的——其中很大一部分是能夠操作日期。因為日期非常重要,比如企業喜歡比較和評估不同時間段的業務績效,統計一個時段的指標,這些都離不開日期函數,能夠操縱日期對于頂級業務運營和業務報告至關重要。

        在本文中,我們將深入探討 SQL 中 5 個最重要和最有用的 DATE 函數以及一些可以使用它們的實際業務案例。

        DATE_TRUNC()

         DATE_TRUNC(date_expression, date_part)

        DATE_TRUNC() 將日期縮短為指定的日期部分。

        在下面的示例中,由于我們指定了 date_part = MONTH,因此 date_trunc() 將截斷日期以獲取該月的第一天:

         DATE_TRUNC('2021-06-28', MONTH) = '2021-06-01'
         DATE_TRUNC('2021-06-28', YEAR) = '2021-01-01'

        如果我們指定 date_part = YEAR,那么我們將得到指定日期的年份的第一天:

        什么時候使用?

        DATE_TRUNC 在你希望定期(例如每周、每月或每年)匯總數字時非常有用。

        DATE_TRUNC 在進行分組分析時是必要的,你通常按月對用戶進行分組。

        示例 :假設你想從下表中獲得每周的銷售額總和:

        1.png

         with sales_data as (
            SELECT DATE_TRUNC(date, WEEK) as week_date,
                    daily_sales
            FROM sales
         )
         SELECT week_date,
                SUM(daily_sales) as weekly_sales
         FROM sales_data
         GROUP BY week_date

        DATE_DIFF()

         DATE_DIFF(date_expression_1, date_expression_2, date_part)

        DATE_DIFF() 比較兩個日期并返回兩個日期之間日期部分的差異。

        例如,如果 date_part = DAY,則 DATE_DIFF() 返回兩個日期之間的天數。如果 date_part = MONTH,則 DATE_DIFF() 返回兩個日期之間的 MONTH 數。

         DATE_DIFF('2021-01-02', '2021-01-01', DAY) = 1

        什么時候使用?

        DATE_DIFF() 在你想要比較兩個日期時很有用,例如,包裹何時發貨和包裹何時交付,或者用戶何時注冊和何時取消。

        DATE_DIFF() 在 WHERE 子句中也很有用,如果你想過濾 X 周期前發生的日期(例如 5 天前、2 周前、上個月)。

        示例1 :假設你想獲取包裹發貨時間和包裹送達時間之間的時間:

        2.png

         SELECT order_id
              , DATE_DIFF(date_received, date_shipped, DAY) as shipping_time
         FROM orders

        示例 2:使用上表,假設你想獲取所有發貨時間少于 10 天的訂單:

         SELECT order_id
              , amount
         FROM orders
         WHERE DATE_DIFF(date_received, date_shipped, DAY) < 10

        DATE_ADD() / DATE_SUB()

         DATE_ADD(date_expression, INTERVAL int64 date_part)
         DATE_SUB(date_expression, INTERVAL int64 date_part)

        DATE_ADD() 將指定數量添加到日期部分。相反,DATE_SUB 將日期指定減去數量。

        DATE_ADD('2021-01-01', INTERVAL 3 DAY) = '2021-01-04'
         DATE_SUB('2021-01-04', INTERVAL 3 DAY) = '2021-01-01'
         DATE_ADD('2021-01-01', INTERVAL 1 MONTH) = '2021-02-01'

        什么時候使用?

        DATE_ADD() 和 DATE_SUB() 可以像 WHERE 子句中的 DATE_DIFF() 一樣使用,以過濾 X 周期前或將來 X 周期發生的日期。

        示例 1:假設你想獲取所有發貨時間少于 10 天的訂單:

        3.jpg

         SELECT order_id
              , amount
         FROM orders
         WHERE DATE_ADD(date_shipped, INTERVAL 10 DAY) > date_received

        EXTRACT()

         EXTRACT(part FROM date_expression)

        EXTRACT() 返回與指定日期部分對應的值。

         EXTRACT(DAY FROM '2021-01-03') = 3
         EXTRACT(MONTH FROM '2021-01-03') = 1
         EXTRACT(YEAR FROM '2021-01-03') = 2021

        什么時候使用?

        使用 EXTRACT() 是獲取日期的特定部份的一種簡單方法。

        例如需要按周數報告,可以使用 EXTRACT() 獲取給定記錄的給定日期的周數。

        EXTRACT() 允許你從日期中獲取月份數或年份,可用作機器學習模型的特征。

        CURRENT_DATE()

         CURRENT_DATE([time_zone])

        CURRENT_DATE() 返回在指定時區執行查詢的當前日期。注意時區參數是可選的,不需要指定。

        什么時候使用?

        使用 CURRENT_DATE() 是引用今天日期的一種更簡單的方法,而不是硬編碼的日期,如果它是在 Airflow 上固化的查詢或你經常使用的查詢,這尤其有用。

        示例 1:假設你想獲取過去一周內發貨的所有訂單:

        4.jpg

         SELECT order_id
              , amount
         FROM orders
         WHERE DATE_DIFF(CURRENT_DATE(), date_shipped, DAY) < 7

        示例 2:假設你想獲取與今天日期同月發貨的任何年份的所有訂單:

         

        SELECT order_id
              , amount
         FROM orders
         WHERE EXTRACT(MONTH FROM date_shipped) = EXTRACT(MONTH FROM CURRENT_DATE())

        編輯:于騰凱

        校對:汪雨晴

        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞: AI

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 贵阳市| 娱乐| 镶黄旗| 广东省| 湛江市| 夏津县| 衡水市| 赤水市| 长治市| 淮滨县| 张家界市| 怀柔区| 松阳县| 天等县| 元阳县| 永平县| 杭锦后旗| 交口县| 扎赉特旗| 米泉市| 山阳县| 海晏县| 新化县| 厦门市| 长春市| 疏附县| 通山县| 介休市| 德格县| 成安县| 天水市| 辰溪县| 克什克腾旗| 黄骅市| 肥东县| 金川县| 子长县| 弥渡县| 商南县| 山阳县| 深泽县|