Home
/
Blog
/
Guides
Guides

SFMC : requête SQL pour abonnés qui ouvrent sans cliquer

Trouvez les abonnés qui ouvrent vos emails sans jamais cliquer avec _Open, _Click et NOT EXISTS : requête SQL SFMC testable, étapes et pièges.

Vous voulez relancer les personnes qui ont ouvert votre email sans jamais cliquer, mais SFMC n'offre aucun filtre natif pour cela. La réponse tient en une requête SQL SFMC : lire _Open, puis exclure toute personne présente dans _Click sur la même période.

Vous trouverez ci-dessous une requête prête à l'emploi pour les 30 derniers jours, une variante pour un envoi précis, une liste d'étapes à copier et les pièges qui faussent le résultat. Si vous préférez éviter la syntaxe, vous pouvez aussi générer du SQL SFMC à partir d'une phrase en français.

‍

Ouvert sans clic dans SFMC : ce que disent vraiment les données

‍

Marketing Cloud enregistre l'engagement dans des data views système. Chaque ouverture arrive dans _Open et chaque clic dans _Click, une ligne par événement, avec SubscriberKey et JobID (l'envoi).

Si ces tables vous sont encore peu familières, notre guide pour interroger les data views de Salesforce Marketing Cloud pose les bases.

‍

Ouvertures et clics sont dans deux tables distinctes

Il n'existe pas de champ « ouvert sans clic ». Il faut repérer les ouvreurs dans une vue, puis retirer les cliqueurs d'une autre, ce que fait très bien une sous-requête NOT EXISTS.

Chaque ouverture et chaque clic occupe sa propre ligne : une même personne peut donc apparaître plusieurs fois. Utilisez toujours DISTINCT ou un GROUP BY.

‍

Niveau abonné ou niveau envoi ?

Au niveau abonné, la question est : cette personne a-t-elle ouvert un email ces 30 derniers jours sans cliquer sur aucun ? C'est idéal pour les audiences de réengagement.

Au niveau envoi, la question devient : cette personne a-t-elle ouvert cet email précis sans toucher à ses liens ? C'est utile pour relancer après une seule campagne. Les deux requêtes suivent.

‍

Requête SQL SFMC : abonnés qui ouvrent sans cliquer en 30 jours

‍

Voici la requête au niveau abonné. Les noms sont génériques : remplacez Customers_Master par votre propre data extension principale.

‍

La requête

SELECT DISTINCT
  o.SubscriberKey,
  c.EmailAddress
FROM _Open o
INNER JOIN Customers_Master c
  ON o.SubscriberKey = c.SubscriberKey
WHERE o.EventDate >= DATEADD(DAY, -30, GETDATE())
  AND NOT EXISTS (
    SELECT 1
    FROM _Click k
    WHERE k.SubscriberKey = o.SubscriberKey
      AND k.EventDate >= DATEADD(DAY, -30, GETDATE())
  )

‍

Configuration de l'activité de requête : data extension cible Opened_Not_Clicked_30d, clé primaire SubscriberKey, type de mise à jour Overwrite (écraser) pour reconstruire l'audience à chaque exécution.

‍

Explication ligne par ligne

  • SELECT DISTINCT renvoie chaque abonné une seule fois, même après plusieurs ouvertures.
  • FROM _Open o lit toutes les ouvertures : c'est le vivier de départ.
  • INNER JOIN Customers_Master c récupère l'adresse email et écarte les clés qui n'existent plus dans votre table principale.
  • Le premier filtre sur EventDate ne garde que les ouvertures des 30 derniers jours.
  • NOT EXISTS avec la sous-requête sur _Click retire tous ceux qui ont cliqué sur la même période.
  • DATEADD(DAY, -30, GETDATE()) calcule une date limite glissante : l'audience se met à jour à chaque exécution.

‍

Créez la data extension cible avec SubscriberKey (Text, 254, clé primaire) et EmailAddress (EmailAddress, 254). Alignez les types sur votre source pour éviter les erreurs de conversion.

Pour en savoir plus sur les dates limites et le comportement de GETDATE() selon les fuseaux horaires, consultez notre guide des fonctions de date SQL dans SFMC.

‍

Variante : ouvert un email précis sans cliquer

‍

Parfois, vous voulez relancer après un seul envoi, par exemple une invitation à un webinaire lue mais dont le lien d'inscription a été ignoré.

‍

Filtrer par JobID

SELECT DISTINCT
  o.SubscriberKey,
  c.EmailAddress
FROM _Open o
INNER JOIN Customers_Master c
  ON o.SubscriberKey = c.SubscriberKey
WHERE o.JobID = 123456
  AND NOT EXISTS (
    SELECT 1
    FROM _Click k
    WHERE k.SubscriberKey = o.SubscriberKey
      AND k.JobID = o.JobID
  )

‍

Remplacez 123456 par le JobID de votre envoi. Vous le trouverez dans Tracking, ou en interrogeant la data view _Job à partir du nom de l'email. Le NOT EXISTS compare aussi JobID : un clic sur un autre email n'exclut donc pas l'abonné.

‍

Pourquoi NOT EXISTS plutôt qu'un LEFT JOIN

Un LEFT JOIN sur _Click avec WHERE k.SubscriberKey IS NULL renvoie les mêmes personnes. NOT EXISTS se lit plus facilement et ne multiplie pas les lignes lorsqu'un abonné a cliqué sur plusieurs liens.

‍

Réponse rapide : construire l'audience en six étapes

‍

  1. Créez une data extension cible avec SubscriberKey et EmailAddress, SubscriberKey étant la clé primaire.
  2. Dans Automation Studio, ajoutez une activité SQL Query et collez la requête ci-dessus.
  3. Pointez l'activité vers la data extension cible et choisissez Overwrite.
  4. Cliquez sur Validate, lancez une exécution manuelle et vérifiez le nombre de lignes.
  5. Ajoutez la requête à une automation planifiée avant votre envoi, pour une audience à jour.
  6. Utilisez la data extension comme audience d'envoi ou comme source d'entrée de Journey Builder.

‍

Que proposer à cette audience

Ces lecteurs ont montré de l'intérêt sans passer à l'action : le message doit donc réduire l'effort demandé. Essayez un email plus court, un seul lien clair ou un autre angle sur la même offre, plutôt que de répéter l'envoi initial.

Gardez un groupe témoin qui ne reçoit rien, afin de mesurer si la relance a vraiment augmenté les clics. Plafonnez aussi la fréquence, car un lecteur qui ouvre sans cliquer peut déjà être saturé.

‍

ObjectifFiltre à modifier
Fenêtre plus courte ou plus longueModifier -30 dans les deux appels à DATEADD
Une campagne préciseFiltrer sur JobID dans les deux vues
Contacts envoyables uniquementJoindre votre data extension envoyable et conserver son filtre de statut
Conserver un historiquePasser en Append et ajouter un champ de date

‍

Un doute sur le type de mise à jour ? Lisez notre comparatif Overwrite, Update ou Append dans une activité de requête.

‍

Les pièges qui faussent une audience ouvert sans clic

‍

Apple Mail Privacy Protection et clics automatiques

Apple Mail Privacy Protection peut enregistrer des ouvertures qu'aucun humain n'a faites, ce qui gonfle votre liste d'ouvreurs. Certains scanners de sécurité déclenchent aussi des clics, ce qui peut retirer à tort des personnes de l'audience.

Considérez le résultat comme un signal d'intérêt probable, pas comme une preuve, et comparez-le à un groupe témoin avant de changer de stratégie.

‍

Rétention, délai d'exécution et mauvaise audience

Les data views ne conservent qu'une fenêtre limitée de données de tracking (vérifiez votre compte, car la durée dépend de votre configuration). Une période de 90 jours peut donc renvoyer un résultat incomplet si les données ont expiré.

Les gros comptes peuvent aussi atteindre la limite de 30 minutes d'une activité de requête. Dans ce cas, réduisez la période ou suivez notre guide pour corriger les timeouts des requêtes SQL SFMC.

Enfin, « ouvert sans clic » ne signifie pas « inactif ». Pour le cas inverse, voyez comment trouver les contacts inactifs dans SFMC.

Salesforce détaille le SQL pris en charge dans son module Trailhead sur l'interrogation de données avec SQL.

‍

Questions fréquentes

‍

Comment trouver les abonnés qui ont ouvert sans cliquer dans SFMC ?

Sélectionnez les abonnés de la data view _Open et excluez ceux présents dans _Click avec NOT EXISTS. Filtrez les deux sur EventDate pour la même période, puis écrivez le résultat dans une data extension via une activité de requête.

‍

Peut-on filtrer ouvertures et clics sans SQL ?

Les filtered data extensions et Audience Builder permettent de segmenter sur l'engagement suivi, mais combiner une ouverture et une absence de clic sur une période glissante y est laborieux. Le SQL offre un contrôle total et se répète selon un planning.

‍

Faut-il utiliser IsUnique dans cette requête ?

Ce n'est pas nécessaire. Les requêtes ci-dessus comptent chaque abonné une fois grâce à DISTINCT, sans dépendre d'un champ que de nombreux praticiens jugent ambigu.

‍

Pourquoi mon résultat est-il plus petit ou plus grand que prévu ?

Vérifiez la période, la jointure avec votre data extension principale et l'éventuelle expiration des anciennes données de tracking. Apple Mail Privacy Protection peut aussi gonfler le nombre d'ouvreurs.

‍

Construisez cette audience en quelques secondes avec QAiry

‍

QAiry transforme une demande comme abonnés qui ont ouvert sans cliquer ces 30 derniers jours en SQL SFMC prêt pour la production et en Data Extension, installé comme application dans votre SFMC. Vous relisez le résultat, mais vous évitez la page blanche.

Envie d'essayer ? Installez QAiry gratuitement ou regardez une démo produit.

Share this article
QAiry for SFMC

Skip the SQL. Build segments by chatting.

QAiry turns plain English requests into Salesforce Marketing Cloud audience segments and data extensions — no SQL, no IT ticket, no waiting.

Built for SFMC · ISV Partner · GDPR-ready