mysql - 如何在没有硬编码的情况下获取时间范围数据
问题描述
我喜欢以下查询。现在我想改变3 days ago from now()
我总是硬编码如下
select
id
,coalesce(sum(case when snapshot_day in ('2021-05-03') then 1 else 0 end), 0) AS "2021-05-03"
,coalesce(sum(case when snapshot_day in ('2021-05-04') then 1 else 0 end), 0) AS "2021-05-04"
,coalesce(sum(case when snapshot_day in ('2021-05-05') then 1 else 0 end), 0) AS "2021-05-05"
from talble
where type in ('Daily')
group by 1
有没有什么好方法可以在没有硬编码的情况下获得结果?
如果有一些例子,有人有意见,请告诉我
谢谢
解决方案
你可以使用 now() :
select
id
,coalesce(sum(case when snapshot_day = cast(now() as date) - interval 2 day then 1 else 0 end), 0) AS "Day before yesterday"
,coalesce(sum(case when snapshot_day = cast(now() as date) - interval 1 day then 1 else 0 end), 0) AS yesterday
,coalesce(sum(case when snapshot_day = cast(now() as date) then 1 else 0 end), 0) AS today
from talble
where type in ('Daily')
and snapshot_day >= cast(now() as date) - interval 2 day
group by id
推荐阅读
- python - 如何在 Python 中使用 NordVPN?
- bash - 带倒计时线的 while 循环
- javascript - TypeError:n.split 不是函数
- php - MariaDB with PHP: SQLSTATE[HY000] [2002] Connection refused
- c# - 如何修复 Visual Studio 将 C# Unity 脚本视为杂项,因此无法自动完成?
- sql - 为什么使用子查询时此查询会变慢
- git - Git Subtree 拉取并自动提交合并
- python - Python中的枚举不转换为数字
- reactjs - 基于设备 Reactjs 的不同 slick-slider 设置参数
- python - Python 中的轻量级 OneDrive 同步(/本地缓存)