计算 SQL 中日期字段的计数和运行总计

Posted

技术标签:

【中文标题】计算 SQL 中日期字段的计数和运行总计【英文标题】:Compute count and running total for date field in SQL 【发布时间】:2015-02-09 11:07:06 【问题描述】:

这是我的困境。我在 SQL 数据库中有一个字段,名为 booking_date。日期是这样的格式

2014-10-13 12:05:58.533

我希望能够计算每个日期(不是日期时间)的预订计数以及运行总数。

所以我的报告看起来像这样

我的SQL代码是这样的

SELECT  
   dbo.book.create_time,
   replace(convert(nvarchar, dbo.book.create_time, 106),' ', '/') as bookingcreation,
   count(*) as Book_Count

来自 ....这里的表

但是,我的计数计算是根据这种类型的日期格式计算日期 > 2014-10-13 12:05:58.533 计算不正确。

所以,我得到了这个:

另外,我不确定如何计算运行总数。但我首先需要正确计数。 非常感谢任何帮助。

【问题讨论】:

你应该用你正在使用的数据库标记你的问题。 SQL 2008,抱歉,不确定在哪里可以编辑标签。 【参考方案1】:

尝试在您的查询中使用trunc(book.create_time),而不是您正在进行的转换

【讨论】:

【参考方案2】:

您似乎在使用 SQL Server。要按天计算:

SELECT cast(dbo.book.create_time as date) as create_date
       count(*) as Book_Count
FROM ...tables here
GROUP BY cast(dbo.book.create_time as date)
ORDER BY create_date;

在 SQL Server 2012+ 中可以使用累积和函数获得累积和:

SELECT cast(dbo.book.create_time as date) as create_date
       count(*) as Book_Count,
       sum(count(*)) over (order by cast(dbo.book.create_time as date) ) as Running_Count
FROM ...tables here
GROUP BY cast(dbo.book.create_time as date)
ORDER BY create_date;

在早期版本中,您可以对相关子查询或cross apply 执行类似操作。

编辑:

在 SQL Server 2008 中,您可以:

WITH t as (
      SELECT cast(dbo.book.create_time as date) as create_date
             count(*) as Book_Count
      FROM ...tables here
      GROUP BY cast(dbo.book.create_time as date)
    )
SELECT t.create_date, t.Book_Count,
       (SELECT SUM(Book_Count)
        FROM t t2
        WHERE t2.create_date <= t.create_date
       ) as Running_Count
FROM t
ORDER BY create_date;

【讨论】:

但是,在 sum 函数上,它显示“order”附近的语法不正确。 编辑是否应该给我计数,并且总计为 2 列? @user3356789 。 . .是的。 这看起来棒极了!在后端我确实有一个 person_id,并且我的选择查询返回非不同的 person_ids...有没有办法将它添加到上面的选择查询中,以便我的计数是正确的 :) 想通了....我确实将(不同的 person_id)算作 Book_Count!非常感谢您的所有帮助@Gordon Linoff

以上是关于计算 SQL 中日期字段的计数和运行总计的主要内容,如果未能解决你的问题,请参考以下文章

按组 SQL 运行总计 (Oracle)

在 SQL Server 中计算运行总计

SQL 查询重新计算运行总计

sql运行总计

sql 互联网销售计数的运行总计

在 hive 中返回上周数据