【问题标题】:MySQL query, Most recent values from a historical table of valuesMySQL查询,历史值表中的最新值
【发布时间】:2011-04-13 22:25:20
【问题描述】:

我有一张包含历史值的表格。每次更新一个值时,都会将该值的副本添加到由“request_id”索引的表中

我正在寻找获取每个“request_id”的最新值,而不必检索整个表。

当前表:

ID | Modified | request_id | value 
-------------------------------------
 1 |       10 |          1 | "one"
 2 |       15 |          1 | "two"
 3 |       15 |          2 | "three"
 4 |       18 |          1 | "fore"
 5 |       25 |          3 | "five"
 6 |       36 |          1 | "six"

结果表

ID | Modified | request_id | value 
-------------------------------------
 3 |       15 |          2 | "three"
 5 |       25 |          3 | "five"
 6 |       36 |          1 | "six"

如果有什么不同,我正在使用 PHP 和 SQLite。

【问题讨论】:

    标签: php sql sqlite


    【解决方案1】:

    SQLite?嗯,无法测试,但试试这个:

    SELECT value FROM your_table GROUP BY request_id ORDER BY modifier;
    

    如果您对此查询有任何问题,请发布错误,我们会尝试修复。

    【讨论】:

    • +1 我从来不知道 GROUP BY 命令...非常好。我必须记住这一点。
    • @MasterZ distinct 适用于整个行集,这意味着如果您选择值和 request_id,您将获得所有行,因为没有 2 行具有相同的 request_id 和值...只是一个提示:)
    • 这是一个很好的解决方案。我认为像这样的 GROUP BY 不适用于 SQLite(Postgre 心态):)
    • @Asterisk 我在发布后立即检查了文档,似乎支持它。老实说,我很惊讶。
    【解决方案2】:

    我的语法可能略有错误,但这应该为您指明正确的方向。

    "SELECT DISTINCT request_id FROM history_table ORDER BY modified"
    

    这只会抓取每个 request_id 之一,因此您不会得到重复。

    【讨论】:

    • ORDER BY modified,它会更接近工作。不过,在与此类似的其他情况下,Distinct 就没有那么好了。您需要获得价值!
    • 我做出了改变。谢谢。 :) 是的,我认为我只使用过一次 DISTINCT,但我认为它在这种情况下很有用。
    • 这样做的问题是它不返回行数据。它只返回 request_id 的 DISTINCT 值
    【解决方案3】:
    SELECT *
    FROM test_table t1
    WHERE t1.modified IN (SELECT max(Modified)
                          FROM test_table t2
                          WHERE t2.request_id = t1.request_id
                          GROUP By t2.request_id)
    

    注意:这不是一种非常有效的方法,因为它具有相关的子查询。

    编辑:无关联,用于 PostgreSQL

    SELECT * FROM test
    WHERE (request_id, modified) IN (SELECT request_id, max(modified)
                                     FROM test
                                     GROUP BY request_id);
    

    【讨论】:

      猜你喜欢
      • 2023-03-03
      • 2020-11-07
      • 1970-01-01
      • 2012-12-03
      • 1970-01-01
      • 2021-12-11
      • 2015-10-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多