sql 日期分组查询
目的
从数据库查询最近N天的数量进行统计
第一步取当前日期
select GETDATE() 得到 2023-03-31 11:15:32.570
第二步取最近几天日期
这样
select GETDATE()-1
或者这样
select dateadd(day, -5, GETDATE())
这里还有个 datediff…
第三步group by 分组查询
select Crdate from table group by Crdate
加上数量
select Crdate,count() from table group by Crdate
加上排序
select Crdate,count() from table group by Crdate order by Crdate desc
第四步接着开始拼
select * from table
select * from table where Crdate>select dateadd(day, -5, GETDATE())
好像要加括号
select * from table where Crdate>(select dateadd(day, -5, GETDATE()))
第五步发现不对劲
select GETDATE() 得到 2023-03-31 11:15:32.570
要的应该是整天吧,这出来 11点前的就不算了,不对头
要去掉时间
select dateadd(day, -5, convert(varchar(10),GETDATE(),102))
得到 2023-03-26 00:00:00.000 这应该可以
第六步group by 得弄一下
SELECT convert(varchar(10),CrDate,102),COUNT(*) from table GROUP BY convert(varchar(10),CrDate,102)
第七步按实际,不需取全库
table 改这样
select crdate from table where crdate>(select dateadd(day, -5, convert(varchar(10),GETDATE(),102)))
第八步拼一起
SELECT convert(varchar(10),CrDate,102),COUNT(*) from select crdate from table where crdate>(select dateadd(day, -5, convert(varchar(10),GETDATE(),102))) GROUP BY convert(varchar(10),CrDate,102)
出错了
第九步想想,查查
得这样改
SELECT convert(varchar(10),a.CrDate,102),COUNT(*) from select crdate from table where crdate>(select dateadd(day, -5, convert(varchar(10),GETDATE(),102))) a GROUP BY convert(varchar(10),a.CrDate,102)
小白不懂,好像还有问题