SQLHUB Telegram 1963
🧠 Хитрая 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 соединяем первую и вторую покупку клиента.
- Далее фильтруем, оставляя только те, у кого вторая покупка была не позднее 7 дней после первой.

⚠️ Важно:

- Клиенты с одной покупкой исключаются — у них нет второй.
- Мы не ищем любые две покупки в пределах 7 дней, а только первую и вторую по порядку.
- INTERVAL '7 days' обеспечивает корректное сравнение дат.

@sqlhub
9👍4🔥2



tgoop.com/sqlhub/1963
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 соединяем первую и вторую покупку клиента.
- Далее фильтруем, оставляя только те, у кого вторая покупка была не позднее 7 дней после первой.

⚠️ Важно:

- Клиенты с одной покупкой исключаются — у них нет второй.
- Мы не ищем любые две покупки в пределах 7 дней, а только первую и вторую по порядку.
- INTERVAL '7 days' обеспечивает корректное сравнение дат.

@sqlhub

BY Data Science. SQL hub


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

View MORE
Open in Telegram


Telegram News

Date: |

Select: Settings – Manage Channel – Administrators – Add administrator. From your list of subscribers, select the correct user. A new window will appear on the screen. Check the rights you’re willing to give to your administrator. Each account can create up to 10 public channels A Hong Kong protester with a petrol bomb. File photo: Dylan Hollingsworth/HKFP. Co-founder of NFT renting protocol Rentable World emiliano.eth shared the group Tuesday morning on Twitter, calling out the "degenerate" community, or crypto obsessives that engage in high-risk trading. A new window will come up. Enter your channel name and bio. (See the character limits above.) Click “Create.”
from us


Telegram Data Science. SQL hub
FROM American