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

如何从Academic表按优先级条件获取单条符合要求的记录?

解决Academic表的优先级查询问题

针对你的需求——优先获取status为'A'或'W'的记录,无匹配时取'T'且仅返回一条,提供几种实用的SQL写法:

方法1:排序后取第一条(单id查询)

通过CASE给记录标记优先级,排序后限制返回第一条:

SELECT id, status, EffDate
FROM Academic
WHERE id = 1 -- 替换为你要查询的目标id
ORDER BY 
  -- 给优先条件的记录分配更高优先级(排序值越小越靠前)
  CASE WHEN status IN ('A', 'W') THEN 1 ELSE 2 END,
  EffDate DESC -- 可选:同优先级时取最新生效日期
LIMIT 1;

如果同id下有多个符合优先条件的记录,EffDate DESC会帮你筛选出最新的那条,可根据实际需求调整排序规则。

方法2:UNION ALL组合查询(单id查询)

先查询优先条件的记录,无结果时再查询'T'的记录:

-- 先查优先匹配的记录
SELECT id, status, EffDate
FROM Academic
WHERE id = 1 AND status IN ('A', 'W')
LIMIT 1
UNION ALL
-- 优先条件无结果时,查'T'的记录
SELECT id, status, EffDate
FROM Academic
WHERE id = 1 AND status = 'T'
LIMIT 1
-- 外层LIMIT确保最终只返回一条
LIMIT 1;

方法3:窗口函数(批量处理所有id)

如果需要为每个id都返回一条符合条件的记录,用ROW_NUMBER()窗口函数分组排序:

WITH ranked_records AS (
  SELECT 
    id, status, EffDate,
    ROW_NUMBER() OVER (
      PARTITION BY id 
      ORDER BY 
        CASE WHEN status IN ('A', 'W') THEN 1 ELSE 2 END,
        EffDate DESC
    ) AS row_rank
  FROM Academic
)
SELECT id, status, EffDate
FROM ranked_records
WHERE row_rank = 1;

这个写法会按id分组,每组内按优先级排序后取第一条,适合批量处理全表数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 23:30:11