请教,一个每天更新的全量表,求按照DS分区时间来统计每天更新的表内一共多少条数据

表格式是这样的:
数据ID
数据名称
数据创建时间
数据状态是否有效
#表每天更新,格式是这样的

ds=20220323
ds=20220322
ds=20220321
ds=20220320

按照日期0320~0323每天统计数据ID 的总量怎么写?
我的代码只有20220323的数据

SELECT  ds AS 时间
        ,count(item_id) AS 总量
FROM    A
WHERE   ds = TO_CHAR(DATEADD(GETDATE(), - 1,'dd'),'yyyymmdd')
AND     REGEXP_REPLACE(SUBSTR(ds,1,10) ,'-','') BETWEEN TO_CHAR(DATEADD(GETDATE(), - 31, 'dd'), 'yyyymmdd')
AND     TO_CHAR(DATEADD(GETDATE(), - 1, 'dd'), 'yyyymmdd')
GROUP BY ds
ORDER BY ds DESC

运行结果及报错内容
时间 总量
20220323 12345566

我想要达到的结果
时间 总量
20220323 12345566
20220322 X1
20220321 Y1

你的sql只有20220323的数据是因为有这个条件

ds = TO_CHAR(DATEADD(GETDATE(), - 1,'dd'),'yyyymmdd')

今天是 20220324,减1天自然就是20220323了。

你想要的查询条件到底是静态的 "0320~0323" ?还是会跟着日期一起变的动态时间范围?如果是动态的,那么这个动态范围的规则是什么?

  1. 假设是静态时间范围
    SELECT  ds AS 时间
         ,count(item_id) AS 总量
    FROM    A
    WHERE   ds between '20220320' and '20220323'
    GROUP BY ds
    
  2. 假设是动态范围,只统计前4天到前1天的数据
    SELECT  ds AS 时间
         ,count(item_id) AS 总量
    FROM    A
    WHERE   ds between TO_CHAR(DATEADD(GETDATE(), - 4,'dd'),'yyyymmdd') and 
      TO_CHAR(DATEADD(GETDATE(), - 1,'dd'),'yyyymmdd')
    GROUP BY ds
    
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632