sql - 如何在SQL中获取同月2个日期字段的计数数据
问题描述
我正在尝试创建一个有 3 列的查询。
- C_Time:包含任务创建日期时间
- Done_Time:包含任务完成日期时间
- 用户 ID:用户的唯一 ID
我想获得结果,我想获得特定月份创建的任务总数和按用户 ID 分组的同一个月完成的任务总数
输出将如下所示:
UserID | CreatedCount | DoneCount
------------------------------------------
U12 | 12 | 12
-------------------------------------------
U13 | 7 | 5
这里 U12 用户在 2020 年 1 月创建了 12 个任务并完成了 12 个任务。但用户 U13 在 2020 年 1 月创建了 7 个任务,当月完成了 5 个任务。
解决方案
您可以使用apply
unpivot 数据然后聚合:
select t.user_id, sum(is_create), sum(is_complete)
from t cross apply
(values (t.c_time, 1, 0), (t.done_time, 0, 1)
) v(t, is_create, is_complete)
where v.t >= '2020-01-01' and v.t < '2020-02-01'
group by t.user_id;
您也可以使用条件聚合来做到这一点:
select user_id,
sum(case when c_time >= '2020-01-01' and c_time < '2020-02-01' then 1 else 0 end),
sum(case when done_time >= '2020-01-01' and done_time < '2020-02-01' then 1 else 0 end)
from t
group by user_id;
对于您的特定示例,这可能会快一点。但是,第一个版本更通用——例如,它允许您轻松地按用户和月份进行汇总。
推荐阅读
- python-3.x - 由于 Python 版本不受支持,AWS CLI 无法正常工作
- java - 无法在 EditText 文本下方绘制形状矩形、路径...
- google-bigquery - 创建 BigQuery 表时,我收到有关配置单元分区的错误消息
- javascript - 如何将相同的道具应用于多个样式的组件?
- linux - 使用 zip 时如何排除 .git 目录和 node_modules 目录?
- google-cloud-spanner - Google Cloud Spanner 未实施检查约束
- java - IOUtils 的潜在资源泄漏像顽固的骡子一样持续存在
- android - 如何将图像从活动 A 传递到活动 B?
- python - 替代在 Python 中通过引用来帮助 DRY
- android - 应用程序启动时如何显示几秒钟的屏幕?