计算 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 中日期字段的计数和运行总计的主要内容,如果未能解决你的问题,请参考以下文章