数据科学面试中应该知道的5个SQL日期函数
来源:DeepHub IMBA 本文约1300字,建议阅读5分钟
深入探讨 SQL 中 5 个最重要和最有用的 DATE 函数以及一些可以使用它们的实际业务案例。
DATE_TRUNC()
DATE_TRUNC(date_expression, date_part)
DATE_TRUNC() 将日期缩短为指定的日期部分。
DATE_TRUNC('2021-06-28', MONTH) = '2021-06-01'
DATE_TRUNC('2021-06-28', YEAR) = '2021-01-01'
DATE_TRUNC 在你希望定期(例如每周、每月或每年)汇总数字时非常有用。 DATE_TRUNC 在进行分组分析时是必要的,你通常按月对用户进行分组。
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_DIFF('2021-01-02', '2021-01-01', DAY) = 1
DATE_DIFF() 在你想要比较两个日期时很有用,例如,包裹何时发货和包裹何时交付,或者用户何时注册和何时取消。 DATE_DIFF() 在 WHERE 子句中也很有用,如果你想过滤 X 周期前发生的日期(例如 5 天前、2 周前、上个月)。
SELECT order_id
, DATE_DIFF(date_received, date_shipped, DAY) as shipping_time
FROM orders
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('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 周期发生的日期。
SELECT order_id
, amount
FROM orders
WHERE DATE_ADD(date_shipped, INTERVAL 10 DAY) > date_received
EXTRACT()
EXTRACT(part FROM date_expression)
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])
SELECT order_id
, amount
FROM orders
WHERE DATE_DIFF(CURRENT_DATE(), date_shipped, DAY) < 7
SELECT order_id
, amount
FROM orders
WHERE EXTRACT(MONTH FROM date_shipped) = EXTRACT(MONTH FROM CURRENT_DATE())
编辑:于腾凯
校对:汪雨晴
评论