Mysql Query, где max (время) меньше, чем сегодня - PullRequest
0 голосов
/ 05 июня 2018

У меня есть две таблицы, первая таблица (задание) хранит данные, а вторая таблица (job_locations) хранит местоположения для каждого задания, я пытаюсь показать количество заданий, местоположения которых меньше, чем сегодня

Я использую DateTime для столбца даты

к сожалению, цифры, которые появляются после проверки следующего кода, неверны
Мой код

SELECT *
FROM `job`
left join job_location
    on job_location.job_id = job.id
where job_location.cutoff_time < CURDATE()
group by job.id

Пожалуйста, помогите мне написатьРабочий запрос.

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Как примечание, вы можете упростить подсчет (в MySQL).И, при условии, что все рабочие места имеют хотя бы одно местоположение, вам вообще не нужно JOIN.Итак:

SELECT jl.job_id, sum( jl.cutoff_time < CURDATE() )
FROM job_location jl
GROUP BY jl.job_id;

Если это не правильно (и вам нужен JOIN), тогда условие на дату должно идти в предложении ON:

SELECT jl.job_id, COUNT(jo.job_id)
FROM job LEFT JOIN
     job_location jl
     ON jl.job_id = j.id AND jl.cutoff_time < CURDATE()
GROUP BY jl.job_id;
0 голосов
/ 05 июня 2018

Я думаю, вам нужно немного перефразировать ваш запрос.Выберите количество заданий, где время отсечения раньше, чем начало сегодняшнего дня.

SELECT
    j.id,
    COUNT(CASE WHEN jl.cutoff_time < CURDATE() THEN 1 END) AS cnt
FROM job j
LEFT JOIN job_location jl;
    ON j.id = jl.job_id
GROUP BY
    j.id;

Обратите внимание, что здесь важно левое объединение, поскольку оно означает, что мы не будем отбрасывать задания, не имеющие критериев соответствия.Вместо этого эти задания будут по-прежнему отображаться в наборе результатов, просто с нулевым счетом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...