You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查询AbilityGenID≤指定值且FormID取差值最小的唯一记录

解决方案

要实现筛选AbilityGenID ≤ 指定搜索值的记录,且每个重复FormID仅保留AbilityGenID与搜索值差值最小的行(即该FormID下最大的AbilityGenID,因为差值=搜索值-AbilityGenID,值越小代表AbilityGenID越接近搜索值),可以使用窗口函数ROW_NUMBER()来完成,具体实现如下:

完整SQL语句

DECLARE @SearchValue INT = 6; -- 替换为你需要的指定搜索值

SELECT 
    [FormID],
    [AbilityGenID],
    [Ability1ID],
    [Ability2ID],
    [HiddenID]
FROM (
    SELECT 
        [FormID],
        [AbilityGenID],
        [Ability1ID],
        [Ability2ID],
        [HiddenID],
        -- 按FormID分组,组内按AbilityGenID降序编号,最接近搜索值的行编号为1
        ROW_NUMBER() OVER (PARTITION BY [FormID] ORDER BY [AbilityGenID] DESC) AS RowNum
    FROM 
        [PokéDex].[dbo].[tblPokemonAbilities]
    WHERE 
        [AbilityGenID] <= @SearchValue
) AS RankedAbilities
WHERE RowNum = 1
ORDER BY [FormID]; -- 可选:按FormID排序结果

语句说明

  • PARTITION BY [FormID]:将数据按FormID划分成独立的组
  • ORDER BY [AbilityGenID] DESC:在每个组内,把AbilityGenID最大的行(与搜索值差值最小的行)排在首位
  • RowNum = 1:仅保留每组的第一行,即符合需求的记录
  • 修改@SearchValue的值即可切换不同的搜索条件

效果验证

针对你提供的样本数据,当@SearchValue=6时,FormID为16、17、18的记录中,AbilityGenID=4的行比3更接近6,会被优先保留,最终结果与你给出的示例完全一致。


内容的提问来源于stack exchange,提问作者ThunderSpark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 12:53:11