首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取特定行SQL之后的所有记录的最简单方法

获取特定行SQL之后的所有记录的最简单方法
EN

Stack Overflow用户
提问于 2017-09-29 19:32:59
回答 1查看 1.2K关注 0票数 0

我编写了一个SQL查询(下面),它使用postID 201在记录之后选择接下来的25条记录。(你不必看)

代码语言:javascript
复制
SELECT
    title,
    content,
    table_with_rn.userID,
    table_with_rn.username,
    postID,
    post_timestamp
FROM
    (
    SELECT
        title,
        content,
        posts.userID,
        users.username,
        postID,
        post_timestamp,
        @rownum := @rownum + 1 AS row_number2
    FROM
        (
            posts
        INNER JOIN users ON posts.userID = users.userID
        )
    CROSS JOIN(
    SELECT
        @rownum := 0
    ) AS r
ORDER BY
    post_timestamp
DESC
) AS table_with_rn
WHERE
    row_number2 >(
    SELECT
        row_number
    FROM
        (
        SELECT
            postID,
            @rownum := @rownum + 1 AS row_number
        FROM
            (
                posts
            INNER JOIN users ON posts.userID = users.userID
            )
        CROSS JOIN(
        SELECT
            @rownum := 0
        ) AS r
    ORDER BY
        post_timestamp
    DESC
    ) AS twn
WHERE
    postID = 201
)
LIMIT 25

它对表进行排序,然后创建一个列,该列保存每一行的行号。然后,在从重复表中选择具有更大行号的记录之前,使用特定的postID选择记录的行号。

这个查询工作正常,但对于一个听起来相当简单的任务来说,它似乎非常复杂。有没有一种更好/更有效/更简单的方法来做这件事?

注意:我意识到我可以跳过整个row_number,只使用postID,因为它是增量的,但是如果我决定不再想让pk成为整数,我想保留我的选项。

Note2:我是MySQL。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-29 21:01:29

我假设有一些列可以用来确定记录是在postID 201记录之前还是之后。通过扫描查询,我可以说您有一个timestamp列,您希望通过该列来订购(忽略post ID的增量性质)。

如果是这样的话,就可以在表some_table上使用一个自联接(为了简单起见),在这里比较两个表实例的timestamp列。但是有一组列,被简化为postID = 201记录的时间戳。

换句话说,我们的联接条件是“具有时间戳大于postID 201的记录的表的所有记录”,后者是指定的条件OP。

结果集现在只包含时间戳大于postID 201的记录,我们将其限制为只包含25个条目。为了直接获得postID 201之后的产品,我们再次通过timestamp订购。

查询可以如下所示:

代码语言:javascript
复制
SELECT 
  larger.*
FROM 
  some_table smaller
JOIN 
  some_table larger
  ON 
    smaller.timestamp < larger.timestamp
  AND smaller.postID = 201
ORDER BY larger.timestamp ASC
LIMIT 25
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46495773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档