【发布时间】:2014-10-23 17:53:49
【问题描述】:
我在 sql 中有一个我用 C# 编写的查询。查询的作用是计算类似于我输入两列日期和否的内容。球作为
Date No. of balls
21/11/2013 2
22/11/2013 3
23/11/2013 4
24/11/2013 5
25/11/2013 2
26/11/2013 5
27/11/2013 4
28/11/2013 3
29/11/2013 9
30/11/2013 8
01/12/2013 7
02/12/2013 4
03/12/2013 5
04/12/2013 6
05/12/2013 2
06/12/2013 0
07/12/2013 1
输出应该是这样的
newdate no. of balls
21/11/2013 -27/11/2013 25
28/11/2013-04/12/2013 42
05/12/2013-07/12/2013 3
即日期在 7 天的间隔内,例如 21/11/2013 到 27/11/2013 然后下一个 7 28/11/2013-04/12/2013 等等,但它应该将 enddate 视为仅数据库日期的结束日期(如第 3 行所示)。 我想使用创建函数函数名(例如函数名称作为间隔)在 sql 中创建一个函数,该函数应该返回输出的日期列,以便我可以在用 c# 编写的 sql 查询中使用该函数(dbo.interval) 作为
string query = @" select dbo.interval([Date]) newdate,
IsNull(ROUND(sum(No. of balls),2),0) [no. of balls]
from stock
Where date between Convert(Datetime,'" + Fromdate + "',103) and Convert(Datetime,'" + Todate + "',103)
Group By dbo.interval([date])";
PS:stock 是一个包含两列日期和编号的表格。球和 + Fromdate + 和 + Todate + 是下拉显示在网格中。它基本上是用户提供的日期的上限和下限,以了解这两个日期之间的信息(在这种情况下,上限和下限的日期是21/11/2013 和 07/12/2013 分别)。因此输出文件看起来像
新日期没有。球 21/11/2013 -27/11/2013 25 28/11/2013-04/12/2013 42 05/12/2013-07/12/2013 3
我曾尝试在 sql 中使用 RecursiveCTE,但它没有太大帮助,因为它只提供临时输出。
【问题讨论】:
-
您使用的是 MS SQL 2008 或更高版本吗?您可以使用 OVER 子句(msdn.microsoft.com/en-us/library/ms189461.aspx)并尝试按 DATEPART(wk, Date)
-
我正在使用 sql server 2008。但是如何为日期编写一个 sql 函数
-
7天间隔是从Stock表中的最小日期开始,还是从一周中的某一天开始?例如:Mon-Sun. -
用户从下拉列表中选择的任何日期都是 startdate。从该日期开始计算 7 天。dropdown 包含股票表中的所有日期
-
假设您将开始日期存储在变量@Fromdate 中。表中 Fromdate 到 date 之间的天数差异为 DATEDIFF(d , @ Fromdate , Date) 现在您可以按 7 进行 div - (DATEDIFF(d , @ Fromdate , Date) / 7 AS INTEGER)
标签: sql sql-server-2008 date datetime dateadd