Estou olhando para os pedidos e tentando simular algumas mensagens que estamos fazendo na consulta para que o Marketing possa obter uma linha de base para quantas respostas eles podem esperar se alterarmos o intervalo de nossas mensagens. Nesse caso, as mensagens são acionadas com base nos pedidos. A ideia é que um cliente receba apenas uma mensagem, independentemente de quantos pedidos forem feitos até o intervalo terminar. por exemplo
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)
Para complicar ainda mais as coisas, não existe um conjunto estático de intervalos. O intervalo começa para o cliente no momento de seu primeiro pedido. Assim, o intervalo de John começa na segunda-feira, mas o intervalo de Susan pode começar na sexta-feira.
Isto é o que eu tenho até agora. Qualquer ajuda seria apreciada.
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
saída de amostra desta consulta
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
Tente isto:
SELECT MIN(dtshipdate) ... GROUP BY intCustomerId
Você pode fazer isso como um CTE ou colocar os dados em alguma tabela.ROW_NUMBER
partição pelo resultado do cálculo na etapa 2, ordene pela data.ROW_NUMBER() = 1
precisa enviar uma mensagem.Isso deve funcionar se a data do primeiro pedido definir os intervalos. Se você precisar estabelecer uma nova data base de intervalo a cada novo pedido após uma pausa maior que o intervalo, deixe um comentário abaixo.