如何在年份变化之间平均分配几周

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/…

以上是关于如何在年份变化之间平均分配几周的主要内容,如果未能解决你的问题,请参考以下文章

如何在熊猫中的 NaN 值之间平均重新分配值?

Python中如何计算当前日期是今年第几周?

如何构建具有连续值之间最大平均距离的阈值图?

在 TensorFlow 中的 GPU 之间平均分配 RNN 内存消耗

我如何计算正确的平均值?

如何取每年的平均数?