MySQL使用LEFT JOIN聚合函数

尼古拉斯·香克斯(Nicholas Shanks)

现在是星期五下午*,我的大脑停止了工作。通常是我这样回答愚蠢的SQL问题,对不起!

我试图通过将左表联接到前一个表来获得一个表以及另一表的一列的最高值。

SELECT
  jobs.*,
  MAX(notes.`timestamp`) AS complete_date
FROM jobs
LEFT JOIN notes ON (jobs.id=notes.job_id)
WHERE (jobs.status="complete" OR jobs.status="closed")
  AND (notes.type="complete" OR notes.type IS NULL)
GROUP BY jobs.id
ORDER BY complete_date ASC

我正在尝试获得所有符合WHERE jobs.…标准的工作,如果有,则为type=complete与该工作相关的最新注释的时间戳

Job ID     Complete Date
1          today
2          NULL
4          yesterday

作业3未出现,因为它不符合jobs.status条件。但是我实际上得到的是:

Job ID     Complete Date
1          today
4          yesterday

作业2丢失,即JOIN的行为类似于INNER JOIN。
我敢肯定,这只是我脑筋急转弯的一刻,但我不明白为什么不管钞票的面额如何,我的左(外)联接都不给我所有工作。

具体来说,用户可以删除便笺,因此潜在的情况是,已完成/已关闭的作业上可能没有type=complete便笺(状态更改时便会输入便笺),我试图抓住用户关闭工作并添加便笺的情况,然后删除便笺。

*在东方的某个地方

塔林

由于您notesWHERE子句中有用于表格的过滤器,因此JOIN行为类似于an INNER JOIN,请将其移至以下JOIN条件:

SELECT
  jobs.*,
  MAX(notes.`timestamp`) AS complete_date
FROM jobs
LEFT JOIN notes 
  ON (jobs.id=notes.job_id)
  AND (notes.type="complete" OR notes.type IS NULL)
WHERE (jobs.status="complete" OR jobs.status="closed")
GROUP BY jobs.id
ORDER BY complete_date ASC;

也可以使用子查询来完成此操作,因此您可以在子查询中应用notes过滤器:

SELECT
  jobs.*,
  n.complete_date
FROM jobs
LEFT JOIN
(
    select job_id, MAX(`timestamp`) AS complete_date
    from notes 
    where (type="complete" OR type IS NULL)
    group by job_id
) n
  ON (jobs.id=n.job_id)
WHERE (jobs.status="complete" OR jobs.status="closed")
ORDER BY complete_date ASC

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MySQL LEFT JOIN无法使用多个表

来自分类Dev

使用WHERE子句的MySQL LEFT JOIN查询

来自分类Dev

使用COUNT ON LEFT JOIN进行MySQL查询

来自分类Dev

mysql pdo使用LEFT JOIN更新记录

来自分类Dev

mysql/mariadb - LEFT JOIN 聚合不返回所有值

来自分类Dev

PSQL:使用 JOIN 函数时出现“必须出现在 GROUP BY 子句中或用于聚合函数中”错误

来自分类Dev

left_join (dplyr) 使用函数

来自分类Dev

如何在mysql中使用聚合函数?

来自分类Dev

使用聚合函数从MySql表中删除?

来自分类Dev

如何在mysql中使用聚合函数?

来自分类Dev

使用INNER JOIN和LEFT JOIN的MySQL查询

来自分类Dev

使用 MySQL,如何使用 Left Join 记录计算 MEDIAN?

来自分类Dev

MySQL:选择与聚合函数不同

来自分类Dev

MySQL- 滥用聚合函数

来自分类Dev

使用COUNT和LEFT JOIN进行缓慢的MYSQL查询

来自分类Dev

使用LEFT JOIN(SELECT)ORDER和LIMIT的MySQL查询

来自分类Dev

表的GROUP BY在使用LEFT JOIN的MySQL中返回错误计数

来自分类Dev

使用LEFT JOIN和History表的MySQL查询的正确结果

来自分类Dev

MySQL-如何改善使用多个LEFT JOIN的复杂查询

来自分类Dev

使用LEFT JOIN(MySQL)时如何排除行

来自分类Dev

如何使用 LEFT JOIN 连接多个 mySQL 表?

来自分类Dev

MySQL - 如何使用 LEFT JOIN 两次?

来自分类Dev

MySQL与Left Join相反

来自分类Dev

MySQL LEFT JOIN 与 OR 条件

来自分类Dev

使用索引的函数聚合失败

来自分类Dev

在哪里使用聚合函数

来自分类Dev

使用多个但相同的聚合函数

来自分类Dev

MySQL中使用PHP的多维数组和聚合函数?

来自分类Dev

MySQL为什么在使用聚合函数时自动求和