nazar-tertyshnyi
@nazar-tertyshnyi
Govnocoder

Как составить SQL запрос?

Доброго времени суток!

Имеется две таблицы
Таблицы

5e67a40d539bd686363146.png

Возникла необходимость составить один SQL запрос, в котором будет учтено:
- Получить всех клиентов по условию (дата регистрации должна находиться между двух заданых дат)(сделано)
- Они являются активированными (status=1) (сделано)
- В результате также необходимо вывести показатели из таблицы current, но за определённый период
Последний пункт поставил меня в тупик. Суть заключается в том, что необходимо получить по сути всех клиентов созданных в определённый период, а также получить их записи из другой таблицы за определённый период.
К примеру. Есть клиенты, которые зарегистрированны 2019-02, 2019-03, 2019-12, 2020-01, 2020-02, 2020-03
Половина из этих клиентов имеют записи в таблице current. Когда я выбираю их при помощи запроса - отсутствующие данные заменяются на NULL и это хорошо. Но теперь задача заключается в том, чтобы получить тот же самый список клиентов, но данные из таблицы current ограничить. Есть клиент, зарегистрированный 2019-05, а второй 2020-01. У первого - есть записи за каждый месяц с даты регистрации. У второго - только когда он зарегистрировался. Теперь я хочу получить их, но с выводом информации из current только за период 2020-02. Тобишь пользователей по сути получаю всех, но информацию для них из current - только за февраль.
Следующий спойлер - то, на чём я застрял и не могу что валять дальше.
Попытки в SQL

SELECT
`users`.`email` AS `Email`, 
IF(`users`.`status`, 'Enabled', 'Disabled') AS `Status`,
`users`.`signup_date` AS `Registration date`,
`users`.`start_date` AS `Start Date`,
`users`.`end_date` AS `End Date`,
`total`.`year` AS `Year`,
`total`.`month` AS `Month`,
`total`.`bytes_received` AS `Bytes Received`, 
`total`.`bytes_sent` AS `Bytes Sent`

FROM `users`

LEFT JOIN `total` ON `total`.`user_id` = `users`.`id`

WHERE 
`users`.`white_label` = 1
AND `users`.`signup_date` >= '2020-02-01' 
AND `users`.`signup_date` < '2020-03-01'

ORDER BY `users`.`signup_date` DESC;



Буду очень рад и благодарен за ссылки, подсказки, подзатыльник и прочее.

Всем бобра и ключ на 13
  • Вопрос задан
  • 64 просмотра
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
SELECT *
  FROM `table_2`
  WHERE `client_id` IN (
    SELECT `client_id`
      FROM `table_1`
      WHERE ...
  )
    AND `date` BETWEEN ... AND ...
Ответ написан
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
В своём SQL-запросе JOIN поменяйте так:
LEFT JOIN `total` ON (`total`.`user_id` = `users`.`id` AND total.year='2020' AND total.month='02')

Ну и всякие другие варианты сравнения (<, >, <=, >=, <>, IN(), BETWEEN(), и т.д.), на ваш вкус и цвет...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы