我有两个表左联接。查询按左表的 ID 列分组。右表有一个名为 close_date 的日期列。问题是,如果有任何右表记录尚未关闭(因此 close_date 为 0000-00-00),那么我不想显示任何左表记录,如果没有右表记录close_date 为 0000-00-00 的表记录,我只想返回具有 MAX 关闭日期的正确表记录。
为了简单起见,假设表格如下所示:
Table1
id
1
2
Table2
table1_id | close_date
1 | 0000-00-00
1 | 2010-01-01
2 | 2010-01-01
2 | 2010-01-02
我希望查询只返回这个:
Table1.id | Table2.close_date
2 | 2010-01-02
我尝试使用别名 CASES 和聚合函数得出答案,但无法按结果进行搜索,而且我试图不进行 3 英里长的查询来解决问题。我浏览了这里的一些相关帖子,但似乎没有一个符合这个特定案例的标准。
最佳答案
使用:
SELECT t1.id,
MAX(t2.close_date)
FROM TABLE1 t1
JOIN TABLE2 t2 ON t2.table1_id = t1.id
WHERE NOT EXISTS(SELECT NULL
FROM TABLE2 t
WHERE t.table1_id = t1.id
AND t.closed_date = '0000-00-00')
'0000-00-00' 应该由 MySQL 隐式转换为 DATETIME。如果不是,则将该值转换为 DATETIME。
关于sql - 尝试通过涉及 CASES 和聚合函数的别名进行搜索的 mysql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4521204/