SQL:在不知道总条目金额的情况下跳过订单中的条目

时间:2014-09-30 00:10:45

标签: mysql sql

标题有点令人困惑,但我想知道是否有办法进行这样的查询:

SELECT * FROM table ORDER BY timestamp LIMIT 10

然后只接受第10个之后的那个(如果小于或等于10个条目,则为无)。

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

2 个答案:

答案 0 :(得分:3)

通过指定OFFSET,您可以获取指定数字后的行。你把它与限制结合起来。 在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

答案 1 :(得分:0)

我尝试this之类的东西,然后添加一个跳过第一个n(在本例中为n = 10)行的where子句。

即。使用链接的示例:

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