PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (1): [1]

> Найдено сообщений: 1
kirsoldatkin Отправлено: 22 Мая, 2020 - 09:13:29 • Тема: Как написать запрос с подзапросом • Форум: SQL и Архитектура БД

Ответов: 2
Просмотров: 685
Не могу сообразить как решить задачку, подскажите, пожалуйста, каким образом можно выбирать строки исходя из рэнжа динамических дат по доп. условию с фиксированным значением?

Пример:
игроки получают уровни в игре, надо выбрать все платежи за период, когда у игрока был 9 уровень.
Есть 2 таблицы Платежи и Уровни, в них поля user_id, time, amount\level соответственно.

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT COUNT(Payments.amount) AS Payments_count, SUM(Payments.amount) AS Gross, DATE_FORMAT(Payments.time, '%d-%m-%Y') AS Payment_time
  2.  
  3. FROM Level_Up
  4.  
  5.     RIGHT JOIN Payments ON Level_Up.user_id = Payments.user_id
  6.  
  7.     WHERE Payments.time >= Level_Up.time AND Level_Up.level IN (SELECT level FROM Level_Up WHERE Level_Up.level = 9)
  8.  
  9.     GROUP BY Payment_time


Возвращает платежи, которые были и на 10 уровне тоже, как избавиться от него - не могу сообразить.
(Добавление)
kirsoldatkin пишет:
Не могу сообразить как решить задачку, подскажите, пожалуйста, каким образом можно выбирать строки исходя из рэнжа динамических дат по доп. условию с фиксированным значением?

Пример:
игроки получают уровни в игре, надо выбрать все платежи за период, когда у игрока был 9 уровень.
Есть 2 таблицы Платежи и Уровни, в них поля user_id, time, amount\level соответственно.

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT COUNT(Payments.amount) AS Payments_count, SUM(Payments.amount) AS Gross, DATE_FORMAT(Payments.time, '%d-%m-%Y') AS Payment_time
  2.  
  3. FROM Level_Up
  4.  
  5.     RIGHT JOIN Payments ON Level_Up.user_id = Payments.user_id
  6.  
  7.     WHERE Payments.time >= Level_Up.time AND Level_Up.level IN (SELECT level FROM Level_Up WHERE Level_Up.level = 9)
  8.  
  9.     GROUP BY Payment_time


Возвращает платежи, которые были и на 10 уровне тоже, как избавиться от него - не могу сообразить.


Поборол:

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT COUNT(Payments.amount) AS Payments_count, SUM(Payments.amount) AS Gross, DATE_FORMAT(Payments.time, '%d-%m-%Y') AS Payment_time
  2. FROM Level_Up
  3.     RIGHT JOIN Payments ON Level_Up.user_id = Payments.user_id
  4.     WHERE Payments.time >= Level_Up.time AND Payments.time < (SELECT time FROM Level_Up WHERE level = 10)
  5.  
  6.     GROUP BY Payment_time


Насколько решение кошерное?

Страниц (1): [1]
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB