我有以下表格:
换句话说,我随时都会跟随一系列客户。我有一个他们第一次购买日期的专栏,另一列是他们在另一次购买时另外购买的。 我想创建一个列,指定进行特定购买的时间段。应定义时间段,使新时段从每月20日开始,因此每个客户的第一个时段应该是他们首次购买的那一天,直到20日。 这说明如下:
我需要什么:
我试图通过一些if语句来实现这个:
WHEN DAY(c.created)<21 and DAY(s.created)<21 and year(c.created)-year(s.created)=0
THEN MONTH(c.created)-MONTH(s.created)+1
WHEN DAY(c.created)>20 and DAY(s.created)<21 and year(c.created)-year(s.created)=0
THEN MONTH(c.created)-MONTH(s.created)+2
等等。 我想知道是否有一种简单(简单)和简单(r)的方法来处理这个问题?
我在MySQL Workbench 6.3 CE中工作
答案 0 :(得分:2)
客户进行购买的日历月第一天的日期可以像这样找到:
DATE_FORMAT(First_purchase , '%Y-%m-01')
因此,会计月的第一天的日期,从每个日历月的20日开始,可以这样找到。
DATE_FORMAT(First_purchase - INTERVAL 19 DAY, '%Y-%m-01') + INTERVAL 19 DAY
然后,您可以按如下方式使用TIMESTAMPDIFF来获取这两种数字之间的月数。
TIMESTAMPDIFF(
MONTH,
DATE_FORMAT(First_purchase - INTERVAL 19 DAY, '%Y-%m-01') + INTERVAL 19 DAY,
DATE_FORMAT(Date_created - INTERVAL 19 DAY, '%Y-%m-01') + INTERVAL 19 DAY) + 1
这将为您提供从First_purchase开始的会计月份编号,其中找到Date_created,其中第一个会计月份的编号为1。
使用原生日期算术代替DAY()
,MONTH()
和YEAR()
函数更有可能在年终和闰年中继续工作以及所有这些。