SQLHUB Telegram 1961
🧠 Хитрая SQL-задача: вторая покупка в течение 7 дней

У вас есть таблица purchases:


purchases (
id SERIAL PRIMARY KEY,
customer_id INT,
purchase_date DATE,
amount NUMERIC
)


Задача:
Найти всех клиентов, у которых вторая покупка произошла не позднее, чем через 7 дней после первой.

Показать:

- customer_id
- first_purchase_date
- second_purchase_date

Решение:


WITH ordered_purchases AS (
SELECT
customer_id,
purchase_date,
ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY purchase_date) AS rn
FROM purchases
),

first_second_purchases AS (
SELECT
p1.customer_id,
p1.purchase_date AS first_purchase_date,
p2.purchase_date AS second_purchase_date
FROM ordered_purchases p1
JOIN ordered_purchases p2
ON p1.customer_id = p2.customer_id
AND p1.rn = 1
AND p2.rn = 2
)

SELECT *
FROM first_second_purchases
WHERE second_purchase_date <= first_purchase_date + INTERVAL '7 days';


🔍 Пояснение:

- ROW_NUMBER() присваивает каждой покупке номер в пределах одного клиента.
- Мы соединяем первую и вторую покупки клиента через self-join.
- В финальном SELECT фильтруем только те пары, где разница между датами ≤ 7 дней.

⚠️ Важно:

- Клиенты с одной покупкой отфильтруются (у них нет второй).
- Сравнение выполняется через INTERVAL '7 days', чтобы корректно обрабатывать даты.
- Это не поиск любых двух покупок в пределах 7 дней, а именно проверка интервала между первой и второй.

@sqlhub
👍278🥰2



tgoop.com/sqlhub/1961
Create:
Last Update:

🧠 Хитрая SQL-задача: вторая покупка в течение 7 дней

У вас есть таблица purchases:


purchases (
id SERIAL PRIMARY KEY,
customer_id INT,
purchase_date DATE,
amount NUMERIC
)


Задача:
Найти всех клиентов, у которых вторая покупка произошла не позднее, чем через 7 дней после первой.

Показать:

- customer_id
- first_purchase_date
- second_purchase_date

Решение:


WITH ordered_purchases AS (
SELECT
customer_id,
purchase_date,
ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY purchase_date) AS rn
FROM purchases
),

first_second_purchases AS (
SELECT
p1.customer_id,
p1.purchase_date AS first_purchase_date,
p2.purchase_date AS second_purchase_date
FROM ordered_purchases p1
JOIN ordered_purchases p2
ON p1.customer_id = p2.customer_id
AND p1.rn = 1
AND p2.rn = 2
)

SELECT *
FROM first_second_purchases
WHERE second_purchase_date <= first_purchase_date + INTERVAL '7 days';


🔍 Пояснение:

- ROW_NUMBER() присваивает каждой покупке номер в пределах одного клиента.
- Мы соединяем первую и вторую покупки клиента через self-join.
- В финальном SELECT фильтруем только те пары, где разница между датами ≤ 7 дней.

⚠️ Важно:

- Клиенты с одной покупкой отфильтруются (у них нет второй).
- Сравнение выполняется через INTERVAL '7 days', чтобы корректно обрабатывать даты.
- Это не поиск любых двух покупок в пределах 7 дней, а именно проверка интервала между первой и второй.

@sqlhub

BY Data Science. SQL hub


Share with your friend now:
tgoop.com/sqlhub/1961

View MORE
Open in Telegram


Telegram News

Date: |

Just at this time, Bitcoin and the broader crypto market have dropped to new 2022 lows. The Bitcoin price has tanked 10 percent dropping to $20,000. On the other hand, the altcoin space is witnessing even more brutal correction. Bitcoin has dropped nearly 60 percent year-to-date and more than 70 percent since its all-time high in November 2021. How to build a private or public channel on Telegram? How to Create a Private or Public Channel on Telegram? Hashtags In the “Bear Market Screaming Therapy Group” on Telegram, members are only allowed to post voice notes of themselves screaming. Anything else will result in an instant ban from the group, which currently has about 75 members.
from us


Telegram Data Science. SQL hub
FROM American