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