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

IBM DB2中如何从Order表按人员复合主键仅返回单条记录

IBM DB2 查询:每个人员仅显示一行订单记录

表结构说明

1. People表

复合主键为key_a、key_b,结构如下:

key_akey_bName...age...e-mail...
1202245
1405689

2. Order表

复合主键包含key_people_a、key_people_b、key_order_a、key_order_b,其中key_people_a、key_people_b关联People表的复合主键,现有数据:

key_people_akey_people_bkey_order_akey_order_bdescription...
1202245123789
1202245123456
1405689123321

需求

编写针对Order表的SELECT语句,实现每个人员仅显示一行订单记录,预期结果:

key_people_akey_people_bkey_order_akey_order_bdescription...
1202245123789
1405689123321

解决方案

在IBM DB2中,可通过窗口函数ROW_NUMBER()按人员分组后取每组第一行,示例SQL如下:

SELECT key_people_a, key_people_b, key_order_a, key_order_b, description...
FROM (
    SELECT 
        *,
        ROW_NUMBER() OVER (PARTITION BY key_people_a, key_people_b ORDER BY key_order_b DESC) AS rn
    FROM "Order"
) t
WHERE rn = 1;

关键说明

  • PARTITION BY key_people_a, key_people_b:按人员的复合主键分组,确保同一人员的订单被归为一组
  • ORDER BY key_order_b DESC:指定每组内的排序规则(此处按key_order_b降序,匹配预期结果中取789这条的逻辑;若需其他规则,可调整排序字段)
  • 外层查询筛选rn=1,仅保留每组的第一行记录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 16:30:06