【问题标题】:SQL query to get historic data from tableSQL查询从表中获取历史数据
【发布时间】:2012-10-16 13:08:55
【问题描述】:

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

id | username | date | status

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

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

1 |塞拉芬| 2012-03-03 | “新的” 2 |约翰 | 2012-03-05 | “新的” 3 |塞拉芬| 2012-03-13 | “待办的” 4 |塞拉芬| 2012-03-15 | “老的” 5 |约翰 | 2012-03-05 | “待办的”

等等等等

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

塞拉芬| “待办的” 约翰 | “新的”

2012-03-04 我应该得到

塞拉芬| “新的”

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

提前致谢

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    以下查询识别给定用户名在指定日期之前的最新记录,并将具有该最新记录 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
    

    【讨论】:

      【解决方案2】:

      获取日期小于或等于输入日期的用户的第一条记录:

      declare @userid nvarchar(128)
      declare @date datetime
      
      SELECT userid, status
      FROM
      (
        SELECT limit 1 * FROM mytable
        WHERE date <= @date
          AND userid = @userid
        ORDER by date desc
      )
      

      未经测试!如果有任何语法错误,请见谅。

      【讨论】:

        【解决方案3】:

        我现在无法在 MySql 数据库上进行测试,但这个查询应该可以完成这项工作。

        table2 查询检索您在所需日期之前为每个用户名注册事件的最大日期:这应该是该人的最后一个状态事件。

        加入获取状态。

        select username, status from table
        join
        (
        select username, max(date) as maxdate from table
        where date <= '2012-04-14'
        group by username ) table2
        on table.username = table2.username and table.date = table.2maxdate
        

        另一种方法可能是不加入

        select username, status from table
        where date = (select max(date) as maxdate from table
        where date <= '2012-04-14'
        group by username )
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-03-12
          • 1970-01-01
          • 1970-01-01
          • 2022-07-10
          • 1970-01-01
          • 2019-01-27
          • 1970-01-01
          • 2021-12-19
          相关资源
          最近更新 更多