【问题标题】:How to count number of records per day?如何计算每天的记录数?
【发布时间】:2012-03-03 01:05:04
【问题描述】:

我在 a 中有一张表,结构如下:

CustID --- DateAdded ---

 396       2012-02-09 
 396       2012-02-09 
 396       2012-02-08 
 396       2012-02-07 
 396       2012-02-07
 396       2012-02-07 
 396       2012-02-06
 396       2012-02-06

我想知道如何在 SQL 中计算过去 7 天每天的记录数,然后将其作为整数返回。

目前我编写了以下 SQL 查询:

SELECT * 
  FROM Responses
 WHERE DateAdded >= dateadd(day, datediff(day, 0, GetDate()) - 7, 0)

RETURN

但是,这只返回过去 7 天的所有条目。如何计算过去 7 天每天的记录?

【问题讨论】:

  • 按添加日期分组。是 MSSQL 吗?
  • @BrunoCosta 是 SQLServer 上的 MSSQL

标签: sql sql-server count


【解决方案1】:
select DateAdded, count(CustID)
from Responses
WHERE DateAdded >=dateadd(day,datediff(day,0,GetDate())- 7,0)
GROUP BY DateAdded

【讨论】:

    【解决方案2】:
    select DateAdded, count(CustID)
    from tbl
    group by DateAdded
    

    大约 7 天的间隔,这是取决于数据库的问题

    【讨论】:

    • @Rupert 这是你应该使用的。如果您使用脚本语言来自动执行查询,则可以使用 SQL 的 TO_CHAR 函数来创建可比较的日期(这在时间戳字段中尤其重要)。
    【解决方案3】:

    这类似于上面的答案,它使用 MySql DATE_FORMAT() 函数。我还只选择了一月份的某一周。

    SELECT 
        DatePart(day, DateAdded) AS date, 
        COUNT(entryhash) AS count 
    FROM Responses 
        where DateAdded > '2020-01-25' and DateAdded < '2020-02-01' 
    GROUP BY 
        DatePart(day, DateAdded )
    

    【讨论】:

      【解决方案4】:
      SELECT DateAdded, COUNT(1) AS NUMBERADDBYDAY
      FROM Responses
      WHERE DateAdded >= dateadd(day,datediff(day,0,GetDate())- 7,0)
      GROUP BY DateAdded
      

      【讨论】:

        【解决方案5】:
        SELECT count(*), dateadded FROM Responses
        WHERE DateAdded >=dateadd(day,datediff(day,0,GetDate())- 7,0)
        group by dateadded
        
        RETURN
        

        这将为您提供每个添加日期值的记录计数。不要错误地在选择中添加更多列,期望每天只得到一个计数。 group by 子句将为列出的列的每个唯一实例提供一行。

        【讨论】:

          【解决方案6】:
          select DateAdded, count(DateAdded) as num_records
          from your_table
          WHERE DateAdded >=dateadd(day,datediff(day,0,GetDate())- 7,0)
          group by DateAdded
          order by DateAdded
          

          【讨论】:

            【解决方案7】:

            如果您的时间戳包括时间,而不仅仅是日期,请使用:

            SELECT DATE_FORMAT('timestamp', '%Y-%m-%d') AS date, COUNT(id) AS count FROM table GROUP BY DATE_FORMAT('timestamp', '%Y-%m-%d')

            【讨论】:

            • 值得注意的是,“DATE_FORMAT”是一个 MySql 函数,不适用于 SQL Server
            • FORMAT(DateAdded, 'yyyy-MM-dd') 在 SQL Server 中工作
            【解决方案8】:

            你也可以试试这个:

            SELECT DISTINCT (DATE(dateadded)) AS unique_date, COUNT(*) AS amount
            FROM table
            GROUP BY unique_date
            ORDER BY unique_date ASC
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2022-10-04
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-11-15
              • 1970-01-01
              • 2021-09-23
              相关资源
              最近更新 更多