如何在SQL中获取以月为单位的时差
以下是我当前数据集的格式:如何在SQL中获取以月为单位的时差,sql,snowflake-cloud-data-platform,Sql,Snowflake Cloud Data Platform,以下是我当前数据集的格式: USER START_DATE END_DATE NB_MONTHS -------------------------------------------- 111 2020-01-01 2021-02-01 13 222 2020-05-17 2020-09-28 16 333 2020-02-01 2020-03-01 0 我的每个用户当前都有一个开始日期和一个结束日期,用于他们已完成的操作。
USER START_DATE END_DATE NB_MONTHS
--------------------------------------------
111 2020-01-01 2021-02-01 13
222 2020-05-17 2020-09-28 16
333 2020-02-01 2020-03-01 0
我的每个用户当前都有一个开始日期和一个结束日期,用于他们已完成的操作。
我希望找到他们行动的持续时间(由NB_MONTHS_标志定义)
以下是获取此NB_月标志的当前查询:
SELECT
USERS,
FLOOR((END_DATE)-(START_DATE))/30.00 as NB_MONTHS
FROM
TABLE1;
我目前正在舍入这个标志,因为这对我的分析最有意义
以下是我遇到的问题:
我的用户333在技术上花了1个月的时间来完成操作(持续时间为2月),但目前被标记为“0个月”,因为2月有28天(这对我的查询不起作用)
有人知道我如何避免这个问题吗?你想怎么做吗
SELECT USERS,
DATEDIFF(MONTH, START_DATE, END_DATE) as NB_MONTHS
FROM TABLE1;
是的,它有效!但是,我有一个警告:我的一些没有结束日期(尚未完成操作)的用户的结束日期为“2999-12-31”。这是一个默认的结束日期。我想做的是,对于这些用户,使用当前的_日期,而不是“2999-12-31”。当声明应用此条件时,我应该将我的案例放在哪里?非常感谢你的帮助!您可能需要
datediff(月、开始日期、最少(结束日期、当前日期))
。但您可能有有效的未来结束日期,而不是“无限期”。在这种情况下,您需要一个case
表达式。