【问题标题】:SQL: Skip entries in an order without knowing total entry amountSQL:在不知道总输入量的情况下跳过订单中的条目
【发布时间】:2014-09-30 00:10:44
【问题描述】:

标题有点混乱,但我想知道是否有办法进行这样的查询:

SELECT * FROM table ORDER BY timestamp LIMIT 10

然后只取第 10 个之后的那些(如果少于或等于 10 个条目,则不取)。

编辑我想另一种方法是按时间戳排序,降序,然后以某种方式限制为0, (total-someNumber)

【问题讨论】:

  • 所以你想跳过前 10 个条目?
  • @AdamJones 是的,对于 EDIT 之前的内容。我不知道为什么我想不出skip这个词:3

标签: mysql sql


【解决方案1】:

通过指定偏移量,您可以获得指定数字之后的行。你把它和限制结合起来。 在 MySQL 中,您可以通过 LIMIT [offset], limit 实现此目的。

示例 - 在最旧的 10 条记录之后获取 10 条记录:

SELECT * FROM table ORDER BY timestamp LIMIT 10, 10;  # Retrieve rows 11-20

示例 - 在最新的 5 条记录之后获取 20 条记录:

SELECT * FROM table ORDER BY timestamp DESC LIMIT 5, 20;  # Retrieve rows 6-25

如果您想在某个数字(例如 10)之后获取所有行,那么您传递一个任意大的数字作为限制,因为子句需要它:

SELECT * FROM table ORDER BY timestamp LIMIT 10,18446744073709551615;  # Retrieve rows 11-BIGINT

注意:18446744073709551615 是无符号 BIGINT 的最大值,在 MySQL 文档中作为解决方案提供。

见: http://dev.mysql.com/doc/refman/5.5/en/select.html

【讨论】:

  • 我想要的是能够跳过第一个,比如 10 个条目,然后得到所有其余的。
  • 查看我的扩展答案。 MySQL 要求您指定最大行数,但正如手册建议的那样,使用最大行数返回偏移后的所有行
【解决方案2】:

我会尝试this 之类的方法,然后只需添加一个 where 子句即可跳过前 n 行(在本例中为 n=10)行。

即使用链接示例:

SELECT
    *
FROM
    (select @n := @n + 1 RowNumber, t.* from (select @n:=0) initvars, tbl t)
WHERE
    RowNumber > 10

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    • 2018-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-25
    • 1970-01-01
    相关资源
    最近更新 更多