【问题标题】:SELECT only rows with higher ID than the last one matching a certain criteria?只选择 ID 高于最后一个匹配特定条件的行?
【发布时间】:2019-03-01 10:51:51
【问题描述】:

假设我有一个如下所示的 SQLite 3 数据库:

ID    COMMAND     MESSAGE
------------------------------------------
1     start       abc
2     foo         xyz
3     bar         123
4     start       Hello
5     xxx         World
6     yyy         !

我只想选择最后一个start 命令之后(包括)的行,即

4     start       Hello
5     xxx         World
6     yyy         !

这可以用纯 SQLite 做吗,还是我应该在应用程序代码(即 PHP)中做这件事?

【问题讨论】:

    标签: php sql pdo sqlite


    【解决方案1】:

    现金:

    我会建议完全戈登林诺夫的建议。

    一个很好的方法是利用子查询。假设您的数据库结构与您给出的示例相同,并且 ID 是按顺序递增的,您可以找到最后一个 START 命令的 ID(使用子查询),然后使用该子查询在您的主查询中进行过滤。您可能会考虑这样的事情:

    SELECT
        myTable.ID
        myTable.COMMAND,
        myTable.MESSAGE
    
    FROM
        myTable
    
    WHERE
        myTable.ID >= ( SELECT MAX(myNewTable.ID) from myTable myNewTable WHERE myNewTable.COMMAND = 'start');
    


    【讨论】:

      【解决方案2】:

      您可以使用子查询获取上次启动的id,然后使用它进行过滤:

      select t.*
      from t
      where t.id >= (select max(t2.id) from t t2 where t2.command = 'start');
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-21
        • 1970-01-01
        • 2021-12-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多