2

选择日期范围时,我需要确定每个销售日期的特定期间开始日期。周期是每两周一次,我所知道的只是最近“上一个周期”的开始日期。我也知道从 2012 年 9 月 10 日开始,每两周计算一次这两周的时间。

例如,给出“2013-07-03”和“2013-09-08”之间的日期范围:

emp|salesdate  |sales |prevperiod |item
123|2013-07-27 |12000 |2013-08-12 |A12
123|2013-07-27 |1800  |2013-08-12 |A17
123|2013-07-28 |400   |2013-08-12 |B03
227|2013-07-27 |1500  |2013-08-12 |A17

我的 SQL 将如何工作以包含销售日期的期间开始日期:

emp|salesdate  |sales |prevperiod |item |salesdateperiodstart
123|2013-07-27 |12000 |2013-08-12 |A12  |2013-07-15
123|2013-07-27 |1800  |2013-08-12 |A17  |2013-07-15
123|2013-07-28 |400   |2013-08-12 |B03  |2013-07-15
123|2013-07-29 |400   |2013-08-12 |B03  |2013-07-29
227|2013-07-27 |1500  |2013-08-12 |A17  |2013-07-15
123|2013-07-28 |400   |2013-08-12 |B03  |2013-07-15

基本上一个周期持续两周,并且从 2012 年 9 月 10 日开始运行。给定销售日期范围,我需要确定每个销售日的结束周期开始日期。

4

2 回答 2

1

基本上你要做的是

  • 解决方案 1:从 '2012-09-10' 计算整周,然后将其添加到 '2012-09-10'
  • 解决方案 2:从 '2012-09-10' 计算整周时计算余数,然后从 salesdate 中减去:

-

select
    emp, salesdate, sales, prevperiod, item,
    dateadd(day, -datediff(day, '20120910', salesdate) % 14, salesdate) as salesdateperiodstart1,
    dateadd(day, (datediff(day, '20120910', salesdate) / 14) * 14, '20120910') as salesdateperiodstart2
from Table1

=>sql fiddle demo

于 2013-09-08T12:39:58.320 回答
0

您的开始日期是 2012 年 9 月 10 日星期一,您的月经持续十四天。因此,下一个周期从 2012 年 9 月 24 日星期一开始,以此类推。

下面的小公式将采用任何日期(或日期时间)并将其转换——我们可以说截断它——到它所在的报告期的第一个日期。

 SELECT FROM_DAYS(TO_DAYS(thedate) -MOD(TO_DAYS(thedate) -9, 14))

这有点晦涩难懂,但它是基于如何在 MySQL 中按周分组?, 并针对年终结转等问题进行了广泛测试。

这是 sql-fiddle 中的一个小查询,它将按报告期开始日期汇总销售额。 http://sqlfiddle.com/#!2/5193c/1/0

我不确定你需要什么prevperiod。但是您不需要它来进行此计算。

于 2013-09-08T11:37:21.117 回答