Ответов: 2 Просмотров: 685
|
Не могу сообразить как решить задачку, подскажите, пожалуйста, каким образом можно выбирать строки исходя из рэнжа динамических дат по доп. условию с фиксированным значением?
Пример:
игроки получают уровни в игре, надо выбрать все платежи за период, когда у игрока был 9 уровень.
Есть 2 таблицы Платежи и Уровни, в них поля user_id, time, amount\level соответственно.
CODE ( SQL):
скопировать код в буфер обмена
SELECT COUNT(Payments.amount) AS Payments_count, SUM(Payments.amount) AS Gross, DATE_FORMAT(Payments.time, '%d-%m-%Y') AS Payment_time FROM Level_Up RIGHT JOIN Payments ON Level_Up.user_id = Payments.user_id WHERE Payments.time >= Level_Up.time AND Level_Up.level IN (SELECT level FROM Level_Up WHERE Level_Up.level = 9) GROUP BY Payment_time
Возвращает платежи, которые были и на 10 уровне тоже, как избавиться от него - не могу сообразить.
(Добавление)
kirsoldatkin пишет:Не могу сообразить как решить задачку, подскажите, пожалуйста, каким образом можно выбирать строки исходя из рэнжа динамических дат по доп. условию с фиксированным значением?
Пример:
игроки получают уровни в игре, надо выбрать все платежи за период, когда у игрока был 9 уровень.
Есть 2 таблицы Платежи и Уровни, в них поля user_id, time, amount\level соответственно.
CODE ( SQL):
скопировать код в буфер обмена
SELECT COUNT(Payments.amount) AS Payments_count, SUM(Payments.amount) AS Gross, DATE_FORMAT(Payments.time, '%d-%m-%Y') AS Payment_time FROM Level_Up RIGHT JOIN Payments ON Level_Up.user_id = Payments.user_id WHERE Payments.time >= Level_Up.time AND Level_Up.level IN (SELECT level FROM Level_Up WHERE Level_Up.level = 9) GROUP BY Payment_time
Возвращает платежи, которые были и на 10 уровне тоже, как избавиться от него - не могу сообразить.
Поборол:
CODE ( SQL):
скопировать код в буфер обмена
SELECT COUNT(Payments.amount) AS Payments_count, SUM(Payments.amount) AS Gross, DATE_FORMAT(Payments.time, '%d-%m-%Y') AS Payment_time FROM Level_Up RIGHT JOIN Payments ON Level_Up.user_id = Payments.user_id WHERE Payments.time >= Level_Up.time AND Payments.time < (SELECT time FROM Level_Up WHERE level = 10) GROUP BY Payment_time
Насколько решение кошерное? |