首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获得上周(7天)甲骨文的每日记录计数

如何获得上周(7天)甲骨文的每日记录计数
EN

Stack Overflow用户
提问于 2018-05-04 08:55:03
回答 2查看 1.3K关注 0票数 0

你好,我正在使用下面的sql查询来获取过去24小时内每小时记录计数

代码语言:javascript
复制
WITH date_range
  AS (SELECT TRUNC(sysdate - (rownum/24),'HH24') as the_hour
        FROM dual
      CONNECT BY ROWNUM <= 24),
     the_data
  AS (SELECT TRUNC(systemdate, 'HH24')  AS log_date, count(*) AS num_obj
        FROM transactionlog where merchantcode='merc0003'
      GROUP BY TRUNC(systemdate, 'HH24'))   
SELECT TO_CHAR(dr.the_hour,'DD/MM/YYYY HH:MI AM'), NVL(trans_log.num_obj,0)
FROM date_range dr LEFT OUTER JOIN the_data  trans_log
     ON trans_log.log_date =  dr.the_hour
ORDER BY dr.the_hour DESC ;  

我试着在过去7天里每天在甲骨文中获得记录计数, ..某个人能指导我通过改变上面的查询来获得最后7天的结果吗?

我试着跟随过去的7天,但到目前为止还没有收获:

代码语言:javascript
复制
WITH date_range
  AS
(SELECT TRUNC(sysdate - (7)) as the_hour
        FROM dual
      CONNECT BY ROWNUM <= 7),
     the_data
  AS (SELECT TRUNC(systemdate, 'HH24')  AS log_date, count(*) AS num_obj
        FROM transactionlog where merchantcode='merc0003'
      GROUP BY TRUNC(systemdate, 'HH24'))   
SELECT TO_CHAR(dr.the_hour,'DD/MM/YYYY HH:MI AM'), NVL(trans_log.num_obj,0)
FROM date_range dr LEFT OUTER JOIN the_data  trans_log
     ON trans_log.log_date =  dr.the_hour
ORDER BY dr.the_hour DESC ; 
EN

回答 2

Stack Overflow用户

发布于 2018-05-04 09:02:01

您的错误是,您没有添加天数;您正在检索同一天七次。在当天添加level (或level - 1,任意您想要的):

代码语言:javascript
复制
SELECT TRUNC(sysdate) - 7 + level AS the_hour
FROM dual
CONNECT BY ROWNUM <= 7
票数 0
EN

Stack Overflow用户

发布于 2018-05-04 11:33:58

我很惊讶你最初的CTE居然成功了。我从未听说过将CONNECT BYROWNUM一起使用(虽然在谷歌上做了一些工作,但我知道它在某些条件下工作。)不过,我确信这是一种滥用)。要获得过去七天的日期范围,您需要以下内容:

代码语言:javascript
复制
WITH date_range AS (
    -- If you want to include today's date, add +1 to the date below
    SELECT TRUNC(SYSDATE - LEVEL) AS the_date
      FROM dual
   CONNECT BY LEVEL <= 7
)

将其与现有查询结合起来:

代码语言:javascript
复制
WITH date_range AS (
    SELECT TRUNC(SYSDATE - LEVEL) AS the_date
      FROM dual
   CONNECT BY LEVEL <= 7
), the_data AS (
    -- You still had 'HH24' here in the call to TRUNC()!
    SELECT TRUNC(systemdate) AS log_date, count(*) AS num_obj
      FROM transactionlog
     WHERE merchantcode = 'merc0003'
     GROUP BY TRUNC(systemdate)
)
SELECT dr.the_date, COALESCE(trans_log.num_obj, 0)
  FROM date_range dr LEFT JOIN the_data trans_log
    ON dr.the_date = trans_log.log_date
 ORDER BY dr.the_date DESC;

顺便说一句,您只需要为您的CTE使用别名;您不需要给它们提供全名就可以再次使用别名。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50170997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档