mysql - Mysql 两个表的条​​件查询

标签 mysql

我在下面提到了两个表:

Table1
ID        key          Val1         Date1
A-1       xyz-ze       AA           2018-10-01 15:16:20
A-1       xyz-ze       AC           2018-10-02 18:19:40
A-2       xyi-ze       BV           2018-07-01 15:16:20
A-2       xyi-ze       CR           2018-03-01 19:22:37
A-2       xyi-ze       BR           2018-10-03 21:17:24

Table2
ID        key          Val2         Date2
A-1       xyz-ze       AA           2018-10-01 15:16:20
A-2       xyi-ze       BR           2018-10-03 22:47:56

通过使用上面的表,我想获取 Val1Val2,但 Val1 应该是最旧的值(考虑到 Date1),然后将 Val1Val2 进行匹配,并据此给出状态。

所需输出:

ID    key     Val1  Val2 Date1                Date2                Status
A-1   xyz-ze  AA    AA   2018-10-01 15:16:20  2018-10-01 15:16:20  TRUE
A-2   xyi-ze  CR    BR   2018-03-01 19:22:37  2018-10-01 15:16:20  FALSE

最佳答案

您可以使用自加入:

SELECT t1.ID, t1.`key`, t1.Val1,  t1.Date1, t2.Date1
FROM Table1 t1
LEFT JOIN Table1 t2 
   ON t1.ID = t2.ID AND t1.`key` = t2.`key` AND t2.Date1 < t1.Date1

获取:

ID  key     Val1    Date1                   Date1
----------------------------------------------------------------
A-1 xyz-ze  AA      2018-10-01T15:16:20Z    (null)
A-1 xyz-ze  AC      2018-10-02T18:19:40Z    2018-10-01T15:16:20Z
A-2 xyi-ze  CR      2018-03-01T19:22:37Z    (null)
A-2 xyi-ze  BV      2018-07-01T15:16:20Z    2018-03-01T19:22:37Z
A-2 xyi-ze  BR      2018-10-03T21:17:24Z    2018-03-01T19:22:37Z
A-2 xyi-ze  BR      2018-10-03T21:17:24Z    2018-07-01T15:16:20Z

这样您就可以使用以下方法确定最早的每组记录:

WHERE t2.Date1 IS NULL

因此,最终的查询将是:

SELECT t1.ID, t1.`key`, t1.Val1, t3.Val2, t1.Date1, t3.Date2
FROM Table1 t1
LEFT JOIN Table1 t2 ON t1.ID = t2.ID AND t1.`key` = t2.`key` AND t2.Date1 < t1.Date1
INNER JOIN Table2 AS t3 ON t1.ID = t3.ID AND t1.`key` = t3.`key` 
WHERE t2.Date1 IS NULL

Demo here

关于mysql - Mysql 两个表的条​​件查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50410324/

相关文章:

php - 在 php 中制作 mysql 单例数据库类的任何更简单/更好的方法?

mysql - 跨多个异构数据库执行连接,例如PostgreSQL 和 MySQL

php - 最佳性能的平均查询数

java - 在 Spring 选择的 Where 中使用 'in' 而不是 '=' 的异常

mysql - 我想将一个表的特定数据迁移到 MySql 中另一个数据库中的另一个特定列

mySql:从另一个表获取一行的最新事务

mysql - AWS Ubuntu 14.04 上的无人值守 MySQL 安装

MySQL 将两个表中的数据与表名合并

php - 我正在用 PHP 做在线测验类型的脚本。最好使用 cookie 或 session

php - Foreach 循环仅返回一个字母