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 关于#java#的问题:找一份能快速看完mooc视频的代码
  • ¥15 这种微信登录授权 谁可以做啊
  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!