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

时间:2014-12-11 03:20:29

标签: sql sql-server sql-server-2008 date aggregate-functions

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

2014-10-13 12:05:58.533

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

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

count report

我的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无法正确计算。

相反,我得到了这个:

report as is now

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

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

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