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

SQL技术求助:查询两列组合唯一值对应的全表列数据

解决SQL查询中获取两列组合唯一行的问题

没问题,我来帮你搞定这个SQL查询的问题!你需要从information表中获取ctc_card_no和tarehe这两列组合值唯一的所有行的完整数据,下面给你几种实用的解决方案,你可以根据自己使用的数据库类型选择:

方法一:窗口函数ROW_NUMBER()(兼容大多数数据库)

这是最通用的方案,适合MySQL 8+、SQL Server、PostgreSQL、Oracle等主流数据库。通过给每个ctc_card_no+tarehe的组合分组编号,然后只保留每组的第一行:

SELECT *
FROM (
    SELECT *,
           -- 按两列组合分组,给每组的行编号
           ROW_NUMBER() OVER (PARTITION BY ctc_card_no, tarehe ORDER BY (SELECT NULL)) AS row_num
    FROM information
) AS temp_table
WHERE row_num = 1;

小提示:如果你希望每组固定返回某一行(比如最新的记录),可以把ORDER BY (SELECT NULL)换成具体的排序列,比如主键列或者时间列,例如ORDER BY id DESC(假设id是主键),这样就能取到每组中ID最大的那一行。

方法二:DISTINCT ON(仅适用于PostgreSQL)

如果你用的是PostgreSQL,这个方法会更简洁:

SELECT DISTINCT ON (ctc_card_no, tarehe) *
FROM information
ORDER BY ctc_card_no, tarehe; -- 这里的ORDER BY必须包含DISTINCT ON指定的列,也可以追加其他排序条件

它会直接返回每个ctc_card_no+tarehe组合的第一行数据,排序规则由后面的ORDER BY决定。

方法三:GROUP BY + 聚合函数(仅适用于其他列值唯一的场景)

如果在同一个ctc_card_no+tarehe组合下,其他列的值都是相同的,你可以用GROUP BY结合聚合函数来实现:

SELECT 
    ctc_card_no, 
    tarehe, 
    MAX(column_name1) AS column_name1,
    MIN(column_name2) AS column_name2
    -- 把表中其他列都用聚合函数包裹
FROM information
GROUP BY ctc_card_no, tarehe;

注意:如果同一组合下其他列存在不同值,这个方法会返回聚合后的结果(比如最大值、最小值),可能不符合你“获取全列数据”的需求,所以谨慎使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:50:40