由一列的唯一记录

由一列的唯一记录

问题描述:

我一直在这个很长一段时间,现在不能得到答案。 我有一个4列的表。我需要返回这些列中的两个,A和B. 但是,我需要按第一列过滤数据.A不是主键。我怎样才能做到这一点?如果我可以返回的所有列的也行,只要数据仅被列A由一列的唯一记录

A B C D 
1 e f r 
1 e f r 
1 e k t 
2 c f r 
2 c f r 
3 l f r 

过滤这应返回

A B C D 
1 e f r 
2 c f r 
3 l f r 

哪个查询西港岛线给我这个结果呢?到现在为止我有这个,但它不能很好地工作:

SELECT DISTINCT A, B, FROM myTable WHERE C=f 
+0

什么是您所查询的结果呢? – Jens

+0

为什么A = 1会返回C = f和D = r?并标记DBMS – JohnHC

+0

1,a,k,t呢?为什么不?你需要建立一个准则 – Horaciux

你可以使用Row_Number()到每个不同的A值内排名列,然后让每个的第一行。

SELECT 
    a, b, c, d 
FROM 
    (SELECT 
     a, b, c, d, 
     Row_Number() OVER (PARTITION BY a ORDER BY b, c, d) rn 
    FROM 
     myTable) mt 
WHERE 
    rn = 1 
+0

你是主人。这是我工作的唯一一个!我必须对它进行调整才能正常工作:我将“FROM myTable”更改为“>>>”FROM myTable WHERE C ='f')mt“。现在它完美地工作。似乎没人理解的问题是,如果在多于一列的列上使用DISTINCT而不是查询将返回更多行并且它们将不是独特的。非常感谢你的帮助! – user8259301

尝试

SELECT A,B FROM myTable WHERE C='f' GROUP BY A,B 
+0

如果你使用的是MySQL 5.7,你还需要修复SQL模式('SET sql_mode ='''),否则这个工作不起作用 –

+0

。也许它会如果我设置sql模式。但我不知道该怎么做。 – user8259301

使用本

with cte as 
(
select * , row_Number() over (Partition by A order by A) as aa from myTable 
) 
select * from cte where aa = 1 
+0

你的工作也很好。我必须像皮特的代码一样做出相同的调整。谢谢! – user8259301