Mysql查询其中max(时间)小于今天

时间:2018-06-05 06:17:02

标签: mysql sql date

我有两个表,第一个表(作业)存储数据,第二个表(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 :(得分:0)

我认为您需要稍微改写一下您的查询。选择截止时间早于今天开始的作业计数。

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;

请注意,左连接在此非常重要,因为这意味着我们不会删除任何没有匹配条件的作业。相反,这些作业仍会出现在结果集中,只有零计数。

答案 1 :(得分:0)

作为一个注释,您可以简化计数(在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;