mysql - 从两个连接表中选择具有最新日期且不重复的行?

标签 mysql

我有表 A 和 B。

表A有这样的数据

|  id  |    status    | made at | ... |
|  1   |     new      |14-04-14 | ... |
|  2   |    fixed     |14-08-12 | ... |
|  3   |    fixed     |14-03-15 | ... |
| ...  |     ...      |  ..     | ... |

在表 B 中,

|  id  |   A_id   |    changes   |changed at| ... |
|  1   |    1     |     new      | 14-04-14 | ... |
|  2   |    2     |     new      | 14-08-12 | ... |
|  3   |    2     |     fixed    | 14-08-28 | ... |
|  4   |    3     |     new      | 14-03-15 | ... |
|  5   |    3     |    fixed     | 14-05-11 | ... |
|  6   |    3     |    fixed     | 14-05-14 | ... |
|  ..  |   ..     |      ..      |   ..     | ... |

我想要的结果是选择在表 A 中具有固定状态和在表 B 中固定更改的内容,不重复

如果它有相同的更改,例如 B 中的 5 和 6,我将只选择最新数据的更改。

所以结果看起来像...

|  id  |  A_id   |  made at  |  status  |  changes  |  changed at |  ...  |
|  2   |   2     | 14-08-12  |  fixed   |   fixed   |  14-08-28   |  ...  |
|  3   |   3     | 14-03-15  |  fixed   |   fixed   |  14-05-14   |  ...  |

我尝试了 select * from A, B where (A.status='fixed') and (A.id=B.A_id) and (B.changes='fixed') 但仍然重复导致改变。

如何正确查询?

最佳答案

试试这个查询

  SELECT tab.* FROM(SELECT A.*,B.A_id,B.chnages,B.changed at 
 FROM  A LEFT JOIN B ON A.id=B.A_id
 WHERE A.status='fixed' AND B.changes ='fixed' 
 ORDER BY B.changes_at DESC ) as tab GROUP BY tab.id 

关于mysql - 从两个连接表中选择具有最新日期且不重复的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32965685/

相关文章:

mysql - 如何防止自动更新应用于 Cloud SQL 实例

mysql - JPA/Hibernate 中查询返回 null,但 mysql 中不返回 null

mysql - 启用 CFI 编译 mysql

php - MySQLi 多个条件,有什么问题

php - 脚本输出为 2 列而不是 1 列

php - 全文搜索查询生成错误,为什么?

sql - 计算日期范围内的天数?

php - 我的 php 表单仅保存表的最后一行。

php - mysql 从下拉列表中选择

php - 我无法回显包含值的 JSON 编码对象