如果我有一个像这样的桌子
begin date end date data
2013-01-01 2013-01-04 7
2013-01-05 2013-01-06 9
我如何才能像这样退货…
date data
2013-01-01 7
2013-01-02 7
2013-01-03 7
2013-01-04 7
2013-01-05 9
2013-01-06 9
我正在考虑做的一件事是让另一个具有全部日期的表,然后使用date>=begin date
和将仅具有日期的表加入到上述表中,date<=end date
但这似乎有点笨拙,因为除了重复的日期外,别无其他维护该表的必要性。
在某些情况下,我没有数据范围,而只有一个as of
日期,基本上看起来像我的第一个示例,但没有end date
。该end date
由下一行的“作为”日暗示(即结束日期应该是下一行的as of
-1)。为此,我有一个“解决方案”,它使用row_number()函数获取下一个值,但我怀疑这种方法(这种方法具有大量嵌套的自我联接)会导致很长的查询时间。
使用一些样本数据…
create table data (begindate datetime, enddate datetime, data int);
insert data select
'20130101', '20130104', 7 union all select
'20130105', '20130106', 9;
查询 :(注意:如果您已经有一个数字/理货表格,请使用它)
select dateadd(d,v.number,d.begindate) adate, data
from data d
join master..spt_values v on v.type='P'
and v.number between 0 and datediff(d, begindate, enddate)
order by adate;
结果 :
| COLUMN_0 | DATA |
-----------------------------------------
| January, 01 2013 00:00:00+0000 | 7 |
| January, 02 2013 00:00:00+0000 | 7 |
| January, 03 2013 00:00:00+0000 | 7 |
| January, 04 2013 00:00:00+0000 | 7 |
| January, 05 2013 00:00:00+0000 | 9 |
| January, 06 2013 00:00:00+0000 | 9 |
或者,您可以即时生成号码表(0-99),也可以根据需要生成任意数量的号码
;WITH Numbers(number) AS (
select top(100) row_number() over (order by (select 0))-1
from sys.columns a
cross join sys.columns b
cross join sys.columns c
cross join sys.columns d
)
select dateadd(d,v.number,d.begindate) adate, data
from data d
join Numbers v on v.number between 0 and datediff(d, begindate, enddate)
order by adate;
SQL小提琴演示
> 每个对象表示一个重复发生的事件。该事件可以在多个日期发生。因此,请考虑以下内容: 我有一个日历在客户端,用户可以选择一个日期范围。 > 对所选日期范围的每个条目进行调用,并在客户端处理聚合。问题是会有大量的读取,因为我们会多次读取重叠的日期范围内的同一个列表对象。 尝试使用类似ElasticSearch/Algolia的服务来完成此操作 任何建议都会很有帮助!
我正在尝试用varchar列中的更新日期列 这里,是varchar数据类型,是日期数据类型。有多种类型的日期格式,例如,09302012, 9/30/2012, 2012-09-30和更多不同的类型 如何编写单个查询以在单个查询中使用各种类型的日期格式更新列。 已编辑::: 抱歉搞砸了...我刚刚意识到这些是ssis包中的单独(部分)更新... 我们有不同类型(6)的品牌,每个品牌都会发送不同日期
周日->明谷-0 周一->赛宁-1 周二->Selasa-2 帮我谢谢
我希望每个框中都有新的日期范围,但它只返回最后一个文本框的日期范围。我也使文本框id的动态,但我仍然面临着这个问题。我有每个文本框的开始日期和结束日期,我用PHP计算了开始日期和结束日期的日期范围,并禁用了用户在开始日期和日期中选择的所有日期,所有这些日期都正常工作,但它返回了datepicker中禁用的最后一个文本框日期。 这是截图- 示例图像 用于datepicker的Javascript函数
我有大量的日期范围,如下所示,示例如下。我需要计算每个实际日历年有多少个月。因此,这将分解为: 合同:123 开始日期:2016年11月1日 结束日期:2018年6月1日 2016年11月1日 合同:456 开始日期:2017年5月31日 结束日期:2019年6月1日 2017年5月31日 有人知道解决这个问题的方法吗?每个合同都有一行,都在同一个表中,开始和结束日期列在同一行中。 我原本打算沿着
问题内容: 我有以下SQL(SQL Server 2005),可用于计算每一列的总时间: 这将为上面的项目返回一个包含 1行 的表格,并且效果很好。 我有点不确定如何返回每天/每周/每月的SUM值表,即 日期范围之间每天的所有值的总和。 日期范围内每个WEEK的所有值的总和。 日期范围之间每个MONTH的所有值的总和。 我敢肯定有一个简单的方法可以做到这一点,但我不确定。我看过一些使用DAY(da