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

标签 sql mysql

我有两个表左联接。查询按左表的 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/

相关文章:

mysql - 从 mysql 表中按组限制选择行

mysql - 如何在 mySQL 中使用基于代码的指令?

java - 来自服务器的错误 : Data source rejected establishment of connection, 消息: "Too many connections"

sql - 当我将值设置为变量时,为什么我的 SQL 语句运行时间要长 N 倍?

sql - PostgreSQL 值 1 和 11 的差异

MySQL 转储兼容不起作用

php - 区 block 链api支付模块

mysql - mysql max_connections 变量是如何强制执行的?

c# - 如何通过 C# 检索所有可能的服务器名称

mysql - 为什么查询 information_schema 需要时间?