Skip to content

Anwendungsfälle für SQL-Segmenterweiterungen

Use the search bar or the checkboxes below to browse sample SQL Segment Extension queries.

Die Ergebnisse werden automatisch aktualisiert, während du tippst.

Nutzer:innen nach Häufigkeit eines Events auswählen

Wählen Sie Nutzer:innen aus, die eine bestimmte E-Mail-Campaign in der Vergangenheit mehr als einmal geöffnet haben.

Dies funktioniert auch für das Capping von In-App-Nachrichten nach Anzahl der Impressionen, z. B. um Nutzer:innen mit mehr als drei Impressionen als Segmentausschluss für dieselbe Campaign auszuwählen.

1
2
3
4
SELECT user_id FROM "USERS_MESSAGES_EMAIL_OPEN_SHARED"
WHERE campaign_api_id='8f7026dc-e9b7-40e6-bdc7-96cf58e80faa'
GROUP BY user_id
HAVING count(*) > 1

Nutzer:innen auswählen, die eine Aktion ausgeführt haben, und einen Eigenschaftswert summieren

Wählen Sie Nutzer:innen aus, die eine Sportwette platziert haben, wobei die Summe aller Wetten einen bestimmten Betrag übersteigt.

1
2
3
select user_id from "USERS_BEHAVIORS_CUSTOMEVENT_SHARED"
where name='Bet On Sports'
group by 1 having sum(get_path(parse_json(properties), 'amount')) > 150

Nutzer:innen basierend auf der Häufigkeit eines Events in einem Zeitraum auswählen

Wählen Sie Nutzer:innen mit mehr als drei E-Mail-Öffnungen in den letzten 30 Tagen aus.

Dies funktioniert auch zur Bestimmung des Engagement-Levels von Nutzer:innen, z. B. um besonders aktive Nutzer:innen über verschiedene Kanäle hinweg zu identifizieren.

1
2
3
4
5
SELECT user_id, COUNT(DISTINCT id) AS num_emails_opened
FROM USERS_MESSAGES_EMAIL_OPEN_SHARED
WHERE to_timestamp_ntz(time) >= DATEADD(day, -30, CURRENT_TIMESTAMP()) AND to_timestamp_ntz(time) <= CURRENT_TIMESTAMP()
GROUP BY user_id;
HAVING COUNT(DISTINCT id) > 3

Nutzer:innen auswählen, die mindestens ein Event in mehreren Zeiträumen aufgezeichnet haben

Wählen Sie Nutzer:innen aus, die in jedem der letzten vier Quartale einen Kauf getätigt haben. Dieses Nutzersegment kann mit Audience Sync verwendet werden, um hochwertige Lookalike-Kund:innen für die Akquise zu identifizieren.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ELECT DISTINCT user_id
FROM USERS_BEHAVIORS_PURCHASE_SHARED
WHERE to_timestamp_ntz(time) >= DATEADD(day, -90, CURRENT_TIMESTAMP()) AND to_timestamp_ntz(time) <= CURRENT_TIMESTAMP()
INTERSECT
SELECT DISTINCT user_id
FROM USERS_BEHAVIORS_PURCHASE_SHARED
WHERE to_timestamp_ntz(time) >= DATEADD(day, -180, CURRENT_TIMESTAMP()) AND to_timestamp_ntz(time) <= DATEADD(day, -91, CURRENT_TIMESTAMP())
INTERSECT
SELECT DISTINCT user_id
FROM USERS_BEHAVIORS_PURCHASE_SHARED
WHERE to_timestamp_ntz(time) >= DATEADD(day, -270, CURRENT_TIMESTAMP()) AND to_timestamp_ntz(time) <= DATEADD(day, -181, CURRENT_TIMESTAMP())
INTERSECT
SELECT DISTINCT user_id
FROM USERS_BEHAVIORS_PURCHASE_SHARED
WHERE to_timestamp_ntz(time) >= DATEADD(day, -365, CURRENT_TIMESTAMP()) AND to_timestamp_ntz(time) <= DATEADD(day, -271, CURRENT_TIMESTAMP());

Jeden Kauf mit bestimmten Eigenschaften auswählen

Wählen Sie Kund:innen aus, die innerhalb von 14 Tagen einen Kauf mit der Eigenschaft "type = shops" getätigt haben.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT
user_id
FROM
USERS_BEHAVIORS_PURCHASE_SHARED
WHERE
product_id IS NOT NULL
AND
get_path(
parse_json(properties),
'propertyname'
) = 'propertyvalue'
AND
to_timestamp_ntz(time) >= DATEADD(day, -14, CURRENT_TIMESTAMP())
AND
to_timestamp_ntz(time) <= CURRENT_TIMESTAMP()
GROUP BY 1
HAVING COUNT(id) > 0;

Nutzer:innen auswählen, denen eine Nachricht gesendet, aber nicht zugestellt wurde

Wählen Sie Nutzer:innen aus, denen eine SMS-Campaign oder ein Canvas gesendet wurde, die Nachricht aber nicht beim Carrier angekommen ist. Beispielsweise könnte die Nachricht durch einen Warteschlangenüberlauf gestoppt worden sein.

1
2
3
4
5
6
7
8
9
SELECT
user_id
FROM
USERS_MESSAGES_SMS_SEND_SHARED
WHERE
CANVAS_ID='63067c50740cc3377f8200d5'
AND TO_PHONE_NUMBER NOT IN (SELECT TO_PHONE_NUMBER FROM USERS_MESSAGES_SMS_CARRIERSEND_SHARED WHERE CANVAS_ID='63067c50740cc3377f8200d5')
GROUP BY 1
HAVING COUNT(id) > 0;

Alle SMS-Nachrichten finden, die gesendet, aber wegen Warteschlangenüberlauf nicht an den Carrier übermittelt wurden

Dies kann auch für andere Nachrichtentypen verwendet werden, die aus einem bestimmten Canvas gesendet, aber nicht zugestellt wurden.

1
2
3
4
5
6
7
8
9
SELECT
user_id
FROM
USERS_MESSAGES_SMS_SEND_SHARED
WHERE
CANVAS_ID='id pulled from URL'
AND TO_PHONE_NUMBER NOT IN (SELECT TO_PHONE_NUMBER FROM USERS_MESSAGES_SMS_CARRIERSEND_SHARED WHERE CANVAS_ID='id pulled from URL')
GROUP BY 1
HAVING COUNT(id) > 0;

CANVAS_ID ist die Nummer nach /canvas/ in Ihrer Canvas-URL.

Nutzer:innen auswählen, die einen Kauf mit einem Eigenschafts-Array getätigt haben, das einen bestimmten Wert enthält

1
2
3
4
SELECT DISTINCT EXTERNAL_USER_ID
FROM "USERS_BEHAVIORS_PURCHASE_SHARED",
LATERAL FLATTEN(input=>parse_json(properties):modifiers) as f
WHERE f.VALUE::STRING = 'Bacon'

Alle Nutzer:innen finden, die mehrere 30003-Fehler und 0 Zustellungen hatten

Dies ist hilfreich, um Situationen zu lösen, in denen Sie den Versand an Nutzer:innen stoppen möchten, die keine Nachrichten empfangen, aber nicht als ungültig markiert werden, weil sie nicht den erforderlichen Fehlercode haben. Sie können diese Nutzer:innen entweder erneut ansprechen, um ihre Telefonnummer zu aktualisieren, oder sie abmelden.

Diese Abfrage verwendet den inkrementellen Editor und sucht nach Nutzer:innen mit drei oder mehr abgelehnten Sendungen in den letzten 90 Tagen und null Zustellungen.

1
2
3
4
5
6
7
8
9
10
SELECT
  $date(time), user_id, COUNT(id)
FROM
  USERS_MESSAGES_SMS_REJECTION_SHARED
WHERE
  provider_error_code = '30003'
  AND
  time > $start_date
    AND TO_PHONE_NUMBER NOT IN (SELECT TO_PHONE_NUMBER FROM USERS_MESSAGES_SMS_DELIVERY_SHARED)
GROUP BY 1, 2;

Nutzer:innen mit bestimmten Event-Eigenschaften und Event-Anzahlen in einem Zeitraum finden

Finden Sie Nutzer:innen, die gleichzeitig die folgenden Bedingungen erfüllen:

  • Haben einen Gesamtwert von mehr als 500 $ transagiert (die Summe mehrerer Transact-Events)
  • Haben im Einkaufszentrum Funan transagiert
  • Haben in den letzten 90 Tagen mehr als dreimal transagiert
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT
USER_ID
FROM
USERS_BEHAVIORS_CUSTOMEVENT_SHARED
WHERE
TIME > $start_date
AND NAME = 'Transact'
AND get_path(parse_json(properties), 'mall') = 'Funan'
GROUP BY
USER_ID
HAVING
SUM(get_path(parse_json(properties), 'total_value')) > 500
AND COUNT(*) > 3

Nutzer:innen auswählen, deren letzte Sitzung auf einem bestimmten Gerätemodell stattfand

1
2
3
4
5
6
select user_id, external_user_id, device_id, platform, os_version, device_model, to_timestamp(max(time)) last_session
from users_behaviors_app_sessionstart
where app_group_id = ''
and date_trunc(day, to_timestamp(time)) <= to_timestamp('2023-08-07')
and device_model = ''
group by user_id, external_user_id, device_id, platform, os_version, device_model

Nutzer:innen finden, die den zweiten Button einer In-App-Nachricht in einem bestimmten Zeitraum ausgewählt haben

1
2
3
4
5
6
SELECT DISTINCT USER_ID, to_timestamp_ntz(time)
FROM USERS_MESSAGES_INAPPMESSAGE_CLICK_SHARED
WHERE to_timestamp_ntz(time) >= '2023-08-03'::timestamp_ntz
AND to_timestamp_ntz(time) <= '2023-08-09'::timestamp_ntz
AND BUTTON_ID = '1'
AND CAMPAIGN_ID = '64c8cd9c4d38d13091957b1c'

Nutzer:innen finden, die in jedem der letzten drei Kalendermonate einen Kauf getätigt haben

1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT DISTINCT user_id
FROM USERS_BEHAVIORS_PURCHASE_SHARED
WHERE to_timestamp_ntz(time) >= '2023-09-01'::timestamp_ntz
AND to_timestamp_ntz(time) <= '2023-09-30'::timestamp_ntz
INTERSECT
SELECT DISTINCT user_id
FROM USERS_BEHAVIORS_PURCHASE_SHARED
WHERE to_timestamp_ntz(time) >= '2023-10-01'::timestamp_ntz
AND to_timestamp_ntz(time) <= '2023-10-31'::timestamp_ntz
INTERSECT
SELECT DISTINCT user_id
FROM USERS_BEHAVIORS_PURCHASE_SHARED
WHERE to_timestamp_ntz(time) >= '2023-11-01'::timestamp_ntz
AND to_timestamp_ntz(time) <= '2023-11-30'::timestamp_ntz;

Nutzer:innen auswählen, die ein angepasstes Event mit einer bestimmten Eigenschaft abgeschlossen haben, wenn die Eigenschaft ein Integer ist

Senden Sie eine Nachricht an Nutzer:innen, die in den letzten sechs Monaten eine Serie angesehen haben und kurz davor stehen, die Plattform zu verlassen.

Die Eigenschaft ist die Titel-ID; andernfalls müssten Sie über 100 Titel-IDs in einem Filter angeben. Die inkrementelle Segmenterweiterung kann kostenoptimiert werden, und Sie können den Datumsbereich im Header festlegen.

1
2
3
4
5
6
7
8
9
10
11
12
SELECT
  $date(time),
  USER_ID,
  COUNT(*)
FROM
  USERS_BEHAVIORS_CUSTOMEVENT_SHARED
WHERE
  TIME > $start_date
  AND NAME = 'event name'
  AND (PARSE_JSON(PROPERTIES):property_name::INT) IN (1, 2)
GROUP BY
  1, 2;

Die durchschnittliche Anzahl der E-Mails ermitteln, die Nutzer:innen täglich erhalten

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
WITH user_email_counts AS (
  SELECT
    USER_ID,
    COUNT(*) AS total_emails,
    DATEDIFF(day, MIN(TO_DATE(DATE_TRUNC('day', TO_TIMESTAMP_NTZ(TIME)))), MAX(TO_DATE(DATE_TRUNC('day', TO_TIMESTAMP_NTZ(TIME))))) AS days
  FROM USERS_MESSAGES_EMAIL_SEND_SHARED
  GROUP BY USER_ID
  HAVING COUNT(USER_ID) > 1
),

-- Then, calculate the average number of emails received by each user daily
user_daily_average AS (
  SELECT
    USER_ID,
    days,
    CASE
      WHEN days = 0 THEN total_emails  -- If the user received all emails in one day, the average for that user is the total number of emails
      ELSE total_emails / days  -- Otherwise, it's the total number of emails divided by the number of days
    END AS daily_average
  FROM user_email_counts
)

-- The total daily average is the average of all users
SELECT
  AVG(daily_average)
FROM user_daily_average;

Die durchschnittliche Anzahl der E-Mails ermitteln, die Nutzer:innen wöchentlich erhalten

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
WITH user_email_counts AS (
  SELECT
    USER_ID,
    COUNT(*) AS total_emails,
    DATEDIFF(week, MIN(TO_DATE(DATE_TRUNC('week', TO_TIMESTAMP_NTZ(TIME)))), MAX(TO_DATE(DATE_TRUNC('week', TO_TIMESTAMP_NTZ(TIME))))) AS weeks
  FROM USERS_MESSAGES_EMAIL_SEND_SHARED
  GROUP BY USER_ID
  HAVING COUNT(USER_ID) > 1
),

-- Then, calculate the average number of emails received by each user weekly
user_weekly_average AS (
  SELECT
    USER_ID,
    CASE
      WHEN weeks = 0 THEN total_emails  -- If the user received all emails in the same week, the average is the total number of emails
      ELSE total_emails / weeks  -- Otherwise, it's the total number of emails divided by the number of weeks
    END AS weekly_average
  FROM user_email_counts
)

-- The total weekly average is the average of all users
SELECT
  AVG(weekly_average) AS average_weekly_emails
FROM user_weekly_average;
New Stuff!