flysun027

有思想的博客

导航

Sql Server 按日统计产量

Posted on 2023-12-07 16:37  flysun027  阅读(72)  评论(0编辑  收藏  举报

碰到一个这样的需求,需要查询每天的产量,直接 group 是可以分出不同天的产量,但是如果当天没有生产,就会少一条那一天的记录,而不是那一天显示产量为0,这样不方便前端显示曲线。

于是找到下面的办法,按月份显示产量,如果当天没有生产,产量显示为 0。其他按日,按年查询也可以根据下面的框架修改。

declare @date datetime
set @date=  '2023-12-01 00:00:00.000';
with t as
(
select number 日期
from master..spt_values with(nolock)
where type= N'P'
     and number >= 1
     and number <= datediff(DAY, DATEADD(MONTH, DATEDIFF(MONTH,0,@date), 0), DATEADD(MONTH, DATEDIFF(MONTH, 0, @date) + 1, 0))
), t2 as
(
  SELECT  DATEPART(day, DateTime_Offload) AS [], count( [ID]) 产量
  FROM [dbo].[Production_Data]
 where DateTime_Offload > dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0, @date), 0)) and DateTime_Offload < dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0, @date) + 1, 0))  and Station_Offload = 'OP265'
 group by DATEPART(day, DateTime_Offload)
)
select 日期, case when (产量 is null) then 0  else 产量 end 产量 from t left join t2 on t.日期 = t2.日

 

按每个月的实际日期数生成如下(这里值演示了5天,实际查询会显示当月的真实天数):

日期 产量
1 64
2 0
3 97
4 0
5 0