mysql - SQL查询从表中获取历史数据

标签 mysql sql

我有一个表,用于存储像这样的人的状态更改历史记录:

id | username | date | status

日期字段是更新状态的时间,状态字段包含此人自该日期以来的新状态。

所以我表中的日期可能是这样的:

1 | serafeim | 2012-03-03 | "NEW"
2 | john | 2012-03-05 | "NEW"
3 | serafeim | 2012-03-13 | "PENDING"
4 | serafeim | 2012-03-15 | "OLD"
5 | john | 2012-03-05 | "PENDING"

等等等等

现在,我想要一个针对过去特定日期的查询,该查询将检索每个用户当时的状态。例如,对于 2012-04-14,我想获得以下结果

serafeim | "PENDING"
john | "NEW"

对于 2012-03-04 我应该得到

serafeim | "NEW"

谁能想到一个 SQL 查询可以做到这一点?我不想以编程方式执行此操作!我正在使用 mysql,但我认为这与我的问题无关...

提前致谢

最佳答案

以下查询识别给定用户名在指定日期之前的最新记录,并使用该最新记录 ID 加入历史表以获取其余详细信息。

SELECT a.* 
FROM 
   history a
   JOIN (SELECT username, MAX(id) 'id' FROM history 
         WHERE date < @inputDate
         GROUP BY username
        ) as b
   ON a.id = b.id

关于mysql - SQL查询从表中获取历史数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13084025/

相关文章:

java - Java 中两个 Timestamp 对象之间的差异

mysql - 此嵌套查询的替代方法?

php - 为什么我可以在 PHP 中的 SQLite 数据库上使用 SELECT 而不是 INSERT?

mysql - 使用不同行中的值对同一个表进行查询

mysql - 有没有办法在表中没有主键的情况下创建外键关系

mysql - 将日期时间值分类到类次,其中类次在第二天结束

mysql - 我是否需要在同一台机器上安装 mysql 才能使用 mysql2 gem?

mysql - 在 Ubuntu 14.04 中安装 MySQL 5.6 会触发删除所需的包

sql - 雪花上带有 RANGE 的滑动窗框的替代品

php - 制作 'wish list' 功能的最佳方法