mysql查询试图通过涉及CASES和聚合函数的别名进行搜索

时间:2010-12-23 17:52:09

标签: sql mysql

我有两张桌子加入了。查询按左表的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英里长的查询来解决问题。我查看了这里的一些相关帖子,但似乎都没有达到这个特殊情况的标准。

2 个答案:

答案 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'