我有两张桌子加入了。查询按左表的ID列分组。右表有一个名为close_date的日期列。问题是,如果有任何权限表记录尚未关闭(因此有一个close_date的0000-00-00),那么我不希望显示任何左表记录,如果没有权利使用close_date of 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英里长的查询来解决问题。我查看了这里的一些相关帖子,但似乎都没有达到这个特殊情况的标准。
答案 0 :(得分:2)
使用:
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。
答案 1 :(得分:0)
尝试:
select table1id,close_date form table2
where close_date= (select max(close_date) from table2) or close_date='0000-00-00'