如何在年份变化之间平均分配几周
Posted
技术标签:
【中文标题】如何在年份变化之间平均分配几周【英文标题】:How to split the weeks equally between the year change 【发布时间】:2015-08-18 21:42:45 【问题描述】:查询在生成几周之前运行良好,直到年份变化。正如您在年份变化期间生成的输出(如下图所示)中所见,我得到了不同的模式。请帮忙。我想要平分 7 天。目前,订单不相等,如您在输出 28/12/2014、01/01/2015 和 04/01/2015 中看到的顺序错误。同样,第一个差异不是 7 天而是 6 天(从 04/09/2014 到 09/11/2014)。我希望这是 7 天,即(从 03/09/2014 到 09/11/2014)
【问题讨论】:
你想让它做什么?您可以尝试 ISO_WEEK 而不是 datepart 的星期。 我想要平分 7 天。目前,订单不相等,如您在输出 28/12/2014、01/01/2015 和 04/01/2015 中看到的顺序错误。同样,第一个差异不是 7 天而是 6 天(从 04/09/2014 到 09/11/2014)。我希望这是 7 天,即(从 03/09/2014 到 09/11/2014) 这个问题肯定不是一个最小的、完整的、可验证的例子***.com/help/mcve 这个问题似乎已经被编辑所以没有意义 【参考方案1】:您可以使用 cte 来生成 14 周
这将生成一个表格,其中包含以 7 天为增量的周数,无论开始日期如何,您都可以使用该表格对数据进行分类:
declare @startdate date
set @startdate = '2014-11-13'
;with cte (SOW,EOW,cnt)
as
(
select @startdate as SOW,dateadd(dd,6,@startdate) as EOW, 1 as cnt
union all
select dateadd(dd,7,SOW),dateadd(dd,7,EOW),cnt+1
from cte
where cnt<14
)
select * from cte
【讨论】:
我是新手,能否将其合并到上述查询中?【参考方案2】:解决方案是使用。更多详情请关注here。
GROUP BY
DATEDIFF(week, 0, ad.xDate)
感谢MatBailie 提供解决方案。
【讨论】:
【参考方案3】:试试这样的。您希望从哪一天开始?
GROUP BY datediff(dd, ad.xDate, @MaxDate) / 7
编辑:我想我理解你想用AllDates
CTE 做什么,但我不知道它是如何工作的。根据它所看到的,它看起来复制了@MinDate
值,并且删除了@MaxDate
之前的每个日期。我的期望是看到这样的东西可以解决你额外的一天问题。我也猜想你的 14 周时间段重叠了一天。
;WITH AllDates AS (
SELECT xDate FROM AllDates WHERE xDate > @MinDate AND xDate <= @MaxDate
)
【讨论】:
而不是这个 GROUP BY datepart(wk, ad.xDate) 我做到了,解决了一个问题,但还剩下一个。前两个日期不拆分为 2014-11-04、2014-11-05,然后对剩余的 2014-11-12、2014-11-19 等进行拆分。 我认为这是因为您的射程中有额外的一天。如果您希望它恰好是 14 周(或其他任何时间),则必须适当调整开始或结束。 我做了几个月类似的事情,即完成一周而不是显示 1 2 3 4 5 6 天。我想知道这里是否可以?实际上日期是动态的,所以从当前日期到过去 14 天?你能建议我怎么做吗,因为我有三个查询。一个在前 14 周显示,第二个在接下来的 14 周显示,第三个在用户上次更新后的 14 周显示。总共 42 周的数据 这是我几个月的工作***.com/questions/32049478/…以上是关于如何在年份变化之间平均分配几周的主要内容,如果未能解决你的问题,请参考以下文章