【问题标题】:How do I get 5 records before AND after a record with a specific ID?如何在具有特定 ID 的记录之前和之后获得 5 条记录?
【发布时间】:2010-03-17 09:54:14
【问题描述】:

我有一个名为scores 的表,其中包含idscore 列。我想通过它的id 以及它之前和之后的 5 条记录来访问特定的记录。 SQL中有没有办法说“用nx前后的项目获取分数?”

【问题讨论】:

  • 你的 ids 是数字和连续的吗?
  • 是的,ID 是数字和顺序的——它们是主键。我也可能按另一个字段(如 date_created)排序。在某种程度上,它几乎是一个子查询——比如,让我得到按 date_created desc 排序的所有分数,然后给定一个 id,获取它之前和之后的 5 个项目。
  • SQL Server? mysql?甲骨文?具体并相应地标记您的问题。
  • 我故意让它通用,因为我相信这个功能是核心 SQL 功能和 DBMS 不可知的。我使用了多个 DBMS,但不想要特定于 DBMS 的答案。

标签: sql


【解决方案1】:

试试:

  SELECT * 
    FROM scores 
   WHERE score >= n
ORDER BY score ASC
   LIMIT 6

 UNION

  SELECT * 
    FROM scores 
   WHERE score < n
ORDER BY score DESC
   LIMIT 5

语法可能会有所不同,具体取决于您使用的数据库服务器。

【讨论】:

  • 我想你可能想要LIMIT 6 作为联合的&gt;= 部分。
  • 谢谢贾斯汀——这正是我想要的。作为旁注,这些选择语句必须用括号括起来(至少对于 MySQL)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-16
  • 2014-04-21
  • 1970-01-01
  • 2015-10-28
  • 2018-05-10
  • 2021-07-22
相关资源
最近更新 更多