【问题标题】:How to automate to get the count of a record for every single day for a couple of months as result?作为结果,如何自动获取几个月内每一天的记录计数?
【发布时间】:2016-11-15 18:37:25
【问题描述】:

我有一个包含客户记录的表 TableA。它还有一种称为“NAME”的特定类型。基本上每天都有几个新客户注册,并且此注册记录以“NAME”类型添加到数据库中。我目前需要的只是截至 15 日之前每天 8 月、9 月、10 月和 11 月的 NAME referenceid 的计数。

select count(referenceid)
from tableA
where type = 'NAME'

如果我需要整整一个月的计数,我会执行以下操作

select count(referenceid)
from tableA
where type = 'NAME'
  and TIMESTAMP BETWEEN TO_DATE('01-AUG-16') AND TO_DATE('31-AUG-16')

我不确定如何自动获取上述所有月份的每日计数。如果没有自动化的方法,我将不得不每天运行几乎 90 多次相同的查询。

如果有人可以提供帮助,我将不胜感激。

【问题讨论】:

  • 按日期分组
  • 请注意,到目前为止仅使用 GROUP BY DATE 提供的解决方案将仅提供数据存在天数的计数。如果由于某种原因在特定日期没有注册新用户,则不会显示计数为 0。如果您确实想用 0 显示天数,则需要生成天数列表并相应地加入 - 这是一篇有用的文章 stackoverflow.com/questions/510012/…
  • @Chriz 我没有考虑到这一点。我可以在回答中使用您的建议吗?
  • @rbr94 当然,我对如何在 MySQL 中进行操作并不是很熟悉,如果能看到解决方案会很高兴!在 MSSQL 中,使用递归 CTE 非常容易!

标签: sql oracle11g


【解决方案1】:

如果我对您的理解正确,请尝试每天使用您的 TIMESTAMPGROUP BY

SELECT TO_CHAR(TIMESTAMP, 'YYYY-MM-DD') AS yourDate, COUNT(referenceid) 
FROM tableA 
WHERE type='NAME' AND TIMESTAMP BETWEEN TO_DATE('01-AUG-16') AND TO_DATE('31-AUG-16')
GROUP BY TO_CHAR(TIMESTAMP, 'YYYY-MM-DD')
ORDER BY yourDate

【讨论】:

  • 它说 ORA-00936: missing expression and points at the first DATE(TIMESTAMP)
  • @SaiAvinash 您的Timestamp 值如何?
  • TIMESTAMP -- 02/Sep/16 12:15:54 PM
  • 顺便问一下,你用的是Oracle / PLSQL吗?`请更改你的标签
  • 实际上我正在使用 oracle 11g .. 我在哪里可以准确检查我正在使用的版本?我将标签更改为 oracle 11g 和 sql,如果可以的话..
【解决方案2】:
select 
    count(referenceid),
    DATENAME(MONTH,[datetimecolumn]) 
from tableA 
where type='NAME' 
GROUP BY MONTH([datetimecolumn])

【讨论】:

  • 顺便说一句,我认为这不符合这个问题。它被要求提供每日值,而不是整个月的值。此外,您应该对您提出的陈述提供一点解释
猜你喜欢
  • 2021-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-30
  • 1970-01-01
  • 2022-10-04
相关资源
最近更新 更多