Data Studio日期维度过滤 如何用>=/<=写CASE语句统计指定日期前用户数
问题原因
你当前的写法存在两个核心问题:
- 你给出的样例日期格式为
日/月/年(如31/01/2021),如果DOJ字段是字符串类型,直接调用FORMAT_DATETIME函数无法正确解析非标准日期格式的字符串,会导致判断逻辑全部失效 - 日期转数字再比较的写法冗余,而且容易因为格式转换出错,直接用原生日期类型比较更稳妥
正确实现
场景1:DOJ为字符串类型(存储格式DD/MM/YYYY)
先将字符串解析为标准日期类型再做判断,统计语句如下:
SELECT COUNT(*) AS 入职符合条件的用户数 FROM 你的表名 WHERE PARSE_DATE('%d/%m/%Y', DOJ) <= '2021-01-30'
不同SQL引擎的字符串转日期函数可能有差异,比如MySQL对应STR_TO_DATE(DOJ, '%d/%m/%Y'),SQL Server对应CONVERT(DATE, DOJ, 103),根据你用的引擎调整即可。
如果你需要保留创建计算字段再聚合的逻辑,计算字段写法调整为:
CASE WHEN PARSE_DATE('%d/%m/%Y', DOJ) <= '2021-01-30' THEN 1 END
对该字段执行COUNT聚合即可得到正确结果。
场景2:DOJ已经是日期类型
直接做日期比较即可,不需要做格式转换:
SELECT COUNT(*) AS 入职符合条件的用户数 FROM 你的表名 WHERE DOJ <= '2021-01-30'
样例验证
你给出的测试数据中,2021年1月30日及之前入职的员工共5人,最终统计结果为5。
内容的提问来源于stack exchange,提问作者Kartik Merchant
相关产品推荐
相关产品推荐

