【问题标题】:Get data by Id and Rank in MySql在 MySql 中通过 Id 和 Rank 获取数据
【发布时间】:2021-06-22 05:03:31
【问题描述】:

这是一个示例原始数据

Id      Rank
2714    1
2713    2
2712    3
2711    4
2710    5
2709    6
2708    7
2706    8
2705    9
2704    10
2703    11
2702    12
2701    13
2700    14
2699    15
2698    16
2697    17
2696    18
2695    19
2694    20

现在例如,用户给我一个 ID = 2705,其排名为 9 现在我必须获取排名 6 和排名 12 之间的数据我该怎么做。

【问题讨论】:

  • Rank 数据是否连续/相邻(没有间隙)?
  • 这两个查询有什么关系?无论如何,您可以添加WHERE-condition 来过滤数据。

标签: mysql sql linq


【解决方案1】:
SELECT t1.*
FROM src_table t1
JOIN src_table t2 ON t1.`rank` BETWEEN t2.`rank` - 3 AND t2.`rank` + 3
WHERE t2.id = 2705 

【讨论】:

    【解决方案2】:

    一种方法使用窗口函数:

    select t.*
    from (select t.*,
                 max(case when id = 2705 then rank end) over () as the_rank
          from t
         ) t
    where rank >= the_rank - 3 and rank <= the_rank + 3;
    

    您也可以使用子查询:

    select t.*
    from t
    where (select t2.rank from t t2 where t2.id = 2705) between t.rank - 3 and t.rank + 3;
    

    如您所知(因为这是您的数据),rank 在 MySQL 中是 reserved word。希望您的实际列名有所不同,但如果是该名称,则需要对其进行转义。

    【讨论】:

    • rank 必须用反引号(保留字)引用。
    猜你喜欢
    • 2019-12-14
    • 1970-01-01
    • 2018-01-18
    • 2018-04-02
    • 2019-04-19
    • 2020-04-04
    • 2012-04-28
    • 2016-02-29
    • 2019-02-12
    相关资源
    最近更新 更多