snowflake-cloud-data-platform - 具有给定开始日期和结束日期的月份中的天数
解决方案
如果您有这样的日历维度,那将非常有帮助。例如,您可以使用以下内容创建一个:
CREATE TEMP TABLE calendar AS
SELECT dateadd(day,seq4(),'2017-01-01'::date) as cal_date,
date_trunc(month,cal_date) as cal_month_start,
dateadd(day,-1,(dateadd(month,1, cal_month_start))) as cal_month_end
FROM table(generator(rowcount => 10000));
使用此calendar
表,您可以使用开始日期和结束日期加入它,并在该日期聚合以获得结果。使用 CTE 复制数据:
WITH x AS (
SELECT member_id, start_date, end_date
FROM (VALUES ('461043068_02','2018-08-07'::date,'2018-08-17'::date),
('461043068_01','2019-05-28'::date,'2019-06-28'::date)
) y (member_id, start_date, end_date)
)
现在,您可以像这样查询x
和加入calendar
:
SELECT member_id, cal_month_start, count(*)
FROM x
JOIN calendar c
ON c.cal_date between dateadd(day,1,x.start_date) and x.end_date
GROUP BY 1,2;
这将为您提供您正在寻找的结果。请注意需要将 1 添加到start_date
,这样您就不会计算日期范围的“边缘”两次。
此外,我没有cal_month_start
在我的查询中格式化,但如果需要,您可以使用TO_VARCHAR()
函数来执行此操作。
推荐阅读
- laravel - 消息:“未定义索引:SKU”
- php - MySQL - 将 unix 时间戳转换为日期(Ymd)并调整每个分组的时区
- android - 为什么应用链接在 Android 中不起作用?
- python - 烧瓶python中的SQL查询返回一个关键错误
- google-sheets - 如何创建一个数组公式来计算一行中三个不同值的中位数?
- regex - case 和 ifnull 语句 - 任何人都可以解释下面的代码
- css - 以这种方式使用 SCSS 地图是不好的做法吗?
- python - 在 Python Dash 中的单击事件上返回“href”值
- c - 如何将 PETSc Vec 数组传递给函数
- c++ - 无法在 C++ 中创建 tesseract::TessBaseAPI 的实例