Fafafa0908 2022-03-24 21:25 采纳率: 100%
浏览 21
已结题

请教,一个每天更新的全量表,求按照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

  • 写回答

2条回答 默认 最新

  • DarkAthena ORACLE应用及数据库设计方案咨询师 2022-03-24 22:02
    关注

    你的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
      
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月1日
  • 已采纳回答 3月24日
  • 创建了问题 3月24日

悬赏问题

  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探