Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

помогите решить задачу sql

Irina Pytailo Знаток (371), закрыт 4 года назад
Есть таблица payments c такими полями: user_id, payment_amount, status, payment_date, product_id
Надо вывести таблицу со следующими полями: user_id, payment_amount, product_id, поле, содержащее следующую покупку пользователя

Не знаю, как задать поле, содержащее следующую покупку. Думаю, что это будет product_id с более поздней датой, но как написать код не знаю
Лучший ответ
Jurijus Zaksas Искусственный Интеллект (423146) 4 года назад
Примерно так:

SELECT P.user_id, P.payment_amount, P.product_id, PP.product_id
FROM payments P, payments PP
WHERE PP.payment_date>P.payment_date
AND NOT EXISTS
(SELECT NULL
FROM payments PPP
WHERE PPP.payment_date > P.payment_date AND PPP.payment_date < PP.payment_date)
AND PPP.user_id=P.user_id)

Можно это сделать через аналитические функции еще, но чой-то я не уверен, что твой препод не охренеет, увидев их.
Irina PytailoЗнаток (371) 4 года назад
спасибо! Первую часть запроса поняла, а что делает выражение после AND NOT EXISTS?
Irina PytailoЗнаток (371) 4 года назад
кажется, поняла. Это выражение позволяет позволяет убедиться, что между pp.payment_date и p.payment_date других дат нет
Jurijus Zaksas Искусственный Интеллект (423146) Да, все верно. Я только один момент еще зевнул: SELECT P.user_id, P.payment_amount, P.product_id, PP.product_id FROM payments P, payments PP WHERE PP.payment_date>P.payment_date AND PP.user_id=P.user_id --Вот этот AND NOT EXISTS (SELECT NULL FROM payments PPP WHERE PPP.payment_date > P.payment_date AND PPP.payment_date < PP.payment_date) AND PPP.user_id=P.user_id)
Павел А. КоржовВысший разум (101772) 4 года назад
Выгоднее сделать селфджойн табдиц product_id по полю user_id.
Остальные ответы
Похожие вопросы