Compter le nombre d'entrées « enregistrées » avec un événement « achat » dans les X jours suivant la date d'inscription (regroupées par date)
P粉308783585
P粉308783585 2023-09-11 19:48:31
0
1
463

J'ai une table comme celle-ci :

<表类=“s-表”> <标题> idHorodatageE-mailipÉvénements <正文> 12021-07-15 00:01:00demo@demo.com11.11.11.11S'inscrire22021-07-15 00:04:00demo@demo.com11.11.11.11Acheter32021-07-15 00:07:00test@test.com22.22.22.22S'inscrire42021-07-15 00:08:00quelqu'un@else.com33.33.33.33S'inscrire52021-07-16 00:01:00test@test.com22.22.22.22Acheter62021-07-16 00:02:00quelqu'un@else.com33.33.33.33Acheter

Suivez les e-mails, adresses IP, dates/heures et événements de tous les utilisateurs (inscriptions et achats).

À l'heure actuelle, j'essaie de faire des statistiques quotidiennes sur a) les inscriptions et b) les conversions (les achats effectués dans les 7 jours suivant l'inscription, la date d'inscription originale attribuée à cet e-mail/IP, pas la date d'achat).

Je pourrais facilement comprendre a) les inscriptions... mais en essayant de comprendre comment interroger les conversions dans les 7 jours, puis attribuer la conversion de chaque inscription à la date d'inscription (au lieu de la date de conversion, ce qui est facile), il s'est avéré être un tout un défi.

Voici ma requête jusqu'à présent :

选择日期(时间戳)作为日期, SUM(CASE WHEN event = '注册' THEN 1 ELSE 0 END) AS 注册, SUM(CASE WHEN event = '购买' THEN 1 ELSE 0 END) AS 转化 来自点击跟踪 哪里日期(时间戳)<='2021-07-31' 和日期(时间戳)>='2021-07-01' 按日期分组 按日期排序

Cela me donne le résultat suivant :

<表类=“s-表”> <标题> DateS'inscrireConversion <正文> 2021-07-15312021-07-1602

Ce dont j'ai idéalement besoin, c'est de quelque chose comme ça (3 événements d'achat associés à 3 événements d'inscription le 15, d'où pourquoi 3 conversions sont attribuées au 15 et aucune au 16) :

<表类=“s-表”> <标题> DateS'inscrireConversion <正文> 2021-07-15332021-07-1600

Est-ce que cela a du sens ?

Gardez à l'esprit que cette table click_tracking a une taille d'un million ou deux enregistrements, et j'ai essayé JOINS sur elle-même plusieurs fois pour la faire planter, donc n'importe quelle requête ne fonctionnera pas...

Une idée sur la façon de résoudre ce problème efficacement et de modifier ma requête pour accomplir cette tâche ?

P粉308783585
P粉308783585

répondre à tous (1)
P粉884667022

Vous avez besoin de fonctions de fenêtre pour effectuer de telles requêtes :

与组合 AS ( 选择日期(时间戳)作为日期0, 电子邮件, FIRST_VALUE(事件) OVER(按电子邮件分区 ORDER BY 当前行和 0 个后续行之间的时间戳行) AS event1, NTH_VALUE(事件,2) OVER(按电子邮件分区 ORDER BY 当前行和后续 1 行之间的时间戳行) AS event2, FIRST_VALUE(日期(时间戳)) OVER(按电子邮件分区 ORDER BY 1 PRECEDING AND 1 FOLLOWING 之间的时间戳行) AS date1, NTH_VALUE(DATE(时间戳),2) OVER(按电子邮件分区 ORDER BY 1 PRECEDING AND 1 FOLLOWING 之间的时间戳行) AS date2 来自点击跟踪 WHERE 时间戳位于“2021-07-01 00:00:00”和“2021-07-30 23:59:59”之间) 选择日期 0 作为日期, SUM(CASE WHEN event1='注册' THEN 1 ELSE 0 END) AS 注册, SUM(CASE WHEN event1='注册' AND event2='购买' AND DATEDIFF(date2,date1)

En supposant que pour chaque e-mail, le premier enregistrement est toujours注册,第二条记录(如果有)始终是购买, vous obtiendrez les 2 premiers enregistrements du type et de la date de cet e-mail à la fois. Vous pourrez ensuite compter facilement les inscriptions et les achats séparément, tout en appliquant des filtres supplémentaires pour qu'il n'y ait pas plus de 7 jours entre 2 événements.

Si vous avez une clé surtimestampalors la requête devrait être assez rapide même avec 1 million de lignes.

    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal
    À propos de nous Clause de non-responsabilité Sitemap
    Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!