我有一个表,将状态更改的历史记录存储到这样的人:
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