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

id | username | date | status


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

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

1 | serafeim | 2012-03-03 | “新”
2 |约翰| 2012-03-05 | “新”
3 | serafeim | 2012-03-13 | “待处理”
4 | serafeim | 2012-03-15 | “旧”
5 |约翰| 2012-03-05 | “待处理”


等等等

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

serafeim | “待处理”
约翰| “新”


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

serafeim | “新”


有人能想到可以做到这一点的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

10-06 16:14
查看更多