mysql - 显示给定 ID 的给定值更改的日期

标签 mysql sql

我需要检查给定 ID 的地址何时更改,并显示更改日期以及(旧和新)地址。

假设我们有这些数据:

 id address      date
 1  Long Street  2015-09-20
 1  Broad Street 2015-09-30
 1  Nice Road    2016-09-30
 2  Black Road   2016-09-30
 2  White Road   2017-01-01

所以查询的输出应该是:

1 Long Street   Broad Street 2015-09-30
1 Broad Street  Nice Road    2016-09-30
2 Black Road    White Road   2017-01-01

很容易检查地址更改了哪些 ID 以及发生了多少次,但我不知道如何显示我实际需要的结果。

最佳答案

您可以使用相关子查询获取上一条记录的日期:

select t.id,
       (select t2.address
        from t t2
        where t2.id = t.id and t2.date < t.date
        order by t2.date desc
        limit 1
      ) prev_address,
      t.address, t.date
from t
having prev_address is not null;

having 子句的使用是 MySQL 的扩展。它的行为类似于使用列别名的 where 子句。

关于mysql - 显示给定 ID 的给定值更改的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46319681/

相关文章:

mysql - 有效的 innodb_lock_wait_timeout 值检查

Mysql 查询获取具有两个日期输入的 from 和 to 列之间的记录

sql - MySQL查询帮助: how to pivot this table?

php - 我无法在服务器上使用 phpmyadmin 进行操作

php - 在html站点中选择一个月并只读取从mysql中选择的月份

sql - 连接和计算来自不同表的行

sql - join 语句中的别名问题

sql - 根据特定的子字符串短语获取数值

mysql - Microsoft Excel SQL 查询中的多个数据源

mysql - 如何从另一个表中不存在列的表中进行选择