我有两个表,第一个表(作业)存储数据,第二个表(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
请帮我写一下工作查询。
答案 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;