选择日期范围时,我需要确定每个销售日期的具体期间开始日期。这段时间是每两周一次,我所知道的是最近“上一期”的开始日期。我也知道这两周的时间是从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日起运行。鉴于销售日期范围,我需要确定每个销售日的结束期开始日期。
答案 0 :(得分:1)
基本上你要做的就是
-
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
<强> =&GT; sql fiddle demo 强>
答案 1 :(得分:0)
您的开始日期是2012年9月10日星期一,您的期限会持续14天。因此,下一个时段从2012年9月24日星期一开始,依此类推。
以下小公式将采用任何日期(或日期时间)并将其转换 - 我们可以将其截断 - 转换为报告期间的第一个日期。
SELECT FROM_DAYS(TO_DAYS(thedate) -MOD(TO_DAYS(thedate) -9, 14))
这有点模糊和令人讨厌,但它基于How to group by week in MySQL?,并经过广泛测试,如年末翻转等。
这是sql-fiddle中的一个小查询,它将通过报告期间开始日期汇总销售。 http://sqlfiddle.com/#!2/5193c/1/0
我不确定你需要什么prevperiod
。但是你不需要这个计算。