【问题标题】:SQL Starting with columns以列开头的 SQL
【发布时间】:2016-07-01 01:55:18
【问题描述】:

我有:

Id | Timestamp column
---------------------------
1  | 700 (not ten, but simple to read)
2  | 800
3  | 800
4  | 800
5  | 600

我得到前 2 条记录,按时间戳 DESC 排序

Id | Timestamp column
---------------------------
2  | 800
3  | 800

现在,我无法获取以 id 3 和时间戳 800 开头的时间戳 DESC 排序的下 2 条记录

我试试:

SELECT * FROM table WHERE timestamp < 800 ORDER BY timestamp DESC LIMIT 2

但返回 ID 1 和 5,这是不正确的。

也可以试试:

SELECT * FROM table WHERE timestamp <= 800 ORDER BY timestamp DESC LIMIT 2

但返回 id 2 和 3,这又是不正确的。

也试试

SELECT * FROM table WHERE timestamp <= 800 AND id > 3 ORDER BY timestamp DESC LIMIT 2

但返回 ID 4 和 5,这又是不正确的。

等等....我尝试的所有方法都不起作用。

查询应该准确返回:

Id | Timestamp column
---------------------------
4  | 800
1  | 700

我也尝试使用按 id 排序,但我无法让它工作。

一些帮助?

编辑:我无法解释,但我肯定不知道已经提取了多少条记录,所以我不能使用 Offset。我只知道最后一条记录 - id 3 和时间戳 800...

【问题讨论】:

    标签: mysql multiple-columns


    【解决方案1】:

    您需要同时按timestampid 进行排序,以便在具有相同timestamp 的所有行中获得一致的排序。然后,当您执行下一个查询时,您使用最后一个 id 作为 WHERE 子句的一部分。

    所以是第一次

    SELECT *
    FROM table
    ORDER BY timestamp DESC, id
    LIMIT 2
    

    从这最后一行获取ID和时间戳到@id@timestamp,那么你的下一个查询应该是:

    SELECT *
    FROM table
    WHERE (timestamp = @timestamp AND id > @id) OR (timestamp < @timestamp)
    ORDER BY timestamp DESC, id
    LIMIT 2
    

    DEMO

    【讨论】:

      【解决方案2】:

      使用下面的查询

      Select * 
      from table 
      where not exists (select * from table where id<=3 and timestamp= 800)
      order by id asc, timestamp desc 
      limit 2
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-26
        • 2021-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-04
        • 1970-01-01
        相关资源
        最近更新 更多