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: |

Commenting about the court's concerns about the spread of false information related to the elections, Minister Fachin noted Brazil is "facing circumstances that could put Brazil's democracy at risk." During the meeting, the information technology secretary at the TSE, Julio Valente, put forward a list of requests the court believes will disinformation. How to Create a Private or Public Channel on Telegram? There have been several contributions to the group with members posting voice notes of screaming, yelling, groaning, and wailing in different rhythms and pitches. Calling out the “degenerate” community or the crypto obsessives that engage in high-risk trading, Co-founder of NFT renting protocol Rentable World emiliano.eth shared this group on his Twitter. He wrote: “hey degen, are you stressed? Just let it out all out. Voice only tg channel for screaming”. A Telegram channel is used for various purposes, from sharing helpful content to implementing a business strategy. In addition, you can use your channel to build and improve your company image, boost your sales, make profits, enhance customer loyalty, and more. Select “New Channel”
from us


Telegram Data Science. SQL hub
FROM American