我正在查看订单并尝试模拟我们在查询中执行的一些消息传递,以便市场营销部门可以获得一个基线,了解如果我们更改消息传递的时间间隔,他们可能会收到多少响应。在这种情况下,消息是根据订单触发的。这个想法是,在间隔结束之前,无论下了多少订单,客户都只会收到一条消息。例如
John orders on Monday, message goes out. (count = 1)
John orders on Thurday,
John orders on Sunday,
John orders on Tuesday message goes out. (count = 2)
更复杂的是,没有一组静态的间隔。该时间间隔从客户第一次下订单时开始。因此,约翰的间歇训练从星期一开始,而苏珊的间歇训练可能从星期五开始。
这是我到目前为止所得到的。任何帮助,将不胜感激。
DECLARE @Interval INT = 7
SELECT o.intappid,
o.intCustomerID,
MAX(o.intOrderID),
MAX(o.dtshipdate),
DATEPART(DAYOFYEAR, o.dtshipdate)/@Interval
FROM .dbo.[order] o
WHERE YEAR(o.dtShipDate) = 2012
AND o.intAppID = 18
AND o.intCustomerID = 296
GROUP BY o.intCustomerID, o.intAppID, DATEPART(DAYOFYEAR, o.dtshipdate)/@Interval
order by o.intAppID, o.intcustomerid, DATEPART(DAYOFYEAR, o.dtshipdate)/@Interval
此查询的示例输出
intappid intCustomerID (No column name) (No column name) (No column name)
18 296 21954 2012-03-07 9
18 296 22671 2012-04-25 16
18 296 22728 2012-04-30 17
18 296 23354 2012-06-14 23
尝试这个:
SELECT MIN(dtshipdate) ... GROUP BY intCustomerId
CTE 那样做,或者把数据放在某个表中。ROW_NUMBER
分区,按日期排序。ROW_NUMBER() = 1
需要发送消息的行。如果第一个订单的日期设置了间隔,这应该有效。如果您需要在比间隔更长的休息时间后为每个新订单建立新的间隔基准日期,请在下方留言。