sql - 如果行名称重复,则仅返回具有重复名称的行
问题描述
详细地说,假设我有这张桌子:
NAME | ID | EMAIL | TYPE
------+----+-------------+------
Joe | 1 | NULL | 01
Joe | 1 | joe@email | 02
Henry | 2 | NULL | 01
Jane | 3 | jane@email | 01
Jane | 3 | jane@email | 02
Larry | 4 | larry@email | 01
Sue | 5 | NULL | 02
我想返回这个:
Joe | 1 | joe@email | 02
Henry | 2 | NULL | 01
Jane | 3 | jane@email | 02
Larry | 4 | larry@email | 01
Sue | 5 | NULL | 02
我已经尝试过Select Distinct
,但这会返回原始表。我还没有找到任何其他似乎可以解决我要问的问题,因为这些行不是完全重复的,只是前两列。
Select *
From Table_Name
解决方案
您似乎希望每个人的记录具有最高TYPE
价值。一种直接的方法用于ROW_NUMBER
识别您要保留的记录:
SELECT NAME, ID, EMAIL, TYPE
FROM
(
SELECT NAME, ID, EMAIL, TYPE,
ROW_NUMBER() OVER (PARTITION BY ID ORDER BY TYPE DESC) rn
FROM yourTable
) t
WHERE rn = 1;
演示
推荐阅读
- postgresql - 用于更新变量表的序列键列的 PostgreSQL 函数
- arrays - Powershell 条件运算符是否支持在对象数组中搜索?
- php - 数组中 FOR 的奇怪 PHP 行为
- java - Springboot中使用@Cacheable时JVM使用的内存
- r - Assigning elements to a list in a nested purrr map
- azure - 如何在 Azure 功能中实现代流?失败并显示“AADSTS50000:发行令牌时出错”
- java - 在Java中打印嵌套地图而不使用instanceof运算符
- php - 使用 PHP 的 SOAP XML 请求不起作用 - 可能是标头问题
- html - 基于没有类的祖先的 CSS 选择器
- javascript - 打印时如何用PDF替换网站