Mysql查询,其中最大(时间)小于今天

Mysql查询,其中最大(时间)小于今天,mysql,sql,date,Mysql,Sql,Date,我有两个表,第一个表(job)存储数据,第二个表(job_locations)存储每个作业的位置,我试图显示作业位置少于今天的作业数量 我使用日期时间作为日期列 不幸的是,测试下一个代码后出现的数字是错误的 我的代码 选择* 从“工作”开始` 左连接作业位置 在岗位置.job\u id=job.id 其中job_location.cutoff_time

我有两个表,第一个表(job)存储数据,第二个表(job_locations)存储每个作业的位置,我试图显示作业位置少于今天的作业数量

我使用日期时间作为日期列

不幸的是,测试下一个代码后出现的数字是错误的
我的代码

选择*
从“工作”开始`
左连接作业位置
在岗位置.job\u id=job.id
其中job_location.cutoff_time

请帮助我编写工作查询。

我认为您需要稍微重新表述您的查询。选择截止时间早于今天开始的作业计数

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;
选择
j、 身份证,
计数(当jl.cutoff_time

注意,左连接在这里很重要,因为它意味着我们不会放弃任何没有匹配条件的作业。相反,这些作业仍然会出现在结果集中,只是计数为零。

注意,您可以简化计数(在MySQL中)。而且,假设所有作业都至少有一个位置,则根本不需要
联接。因此:

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

读取mysql(),不显示任何数字。也许这就是原因。那正是我要找的!谢谢@艾哈迈德扎因。这实际上不是编写查询的最佳方式。比较应该在
ON
子句中,在
SELECT
中有一个
COUNT()
。如果所有作业都至少有一个位置,则条件聚合甚至不需要
联接。@TimBiegeleisen。查询是回答问题的正确方式,但不是最好的方式。我不能删除我的帖子。至少我的查询给出了正确的结果。
SELECT jl.job_id, sum( jl.cutoff_time < CURDATE() )
FROM job_location jl
GROUP BY jl.job_id;
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;