由一列的唯一记录
我一直在这个很长一段时间,现在不能得到答案。 我有一个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
你可以使用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
你是主人。这是我工作的唯一一个!我必须对它进行调整才能正常工作:我将“FROM myTable”更改为“>>>”FROM myTable WHERE C ='f')mt“。现在它完美地工作。似乎没人理解的问题是,如果在多于一列的列上使用DISTINCT而不是查询将返回更多行并且它们将不是独特的。非常感谢你的帮助! – user8259301
尝试
SELECT A,B FROM myTable WHERE C='f' GROUP BY A,B
如果你使用的是MySQL 5.7,你还需要修复SQL模式('SET sql_mode ='''),否则这个工作不起作用 –
。也许它会如果我设置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
你的工作也很好。我必须像皮特的代码一样做出相同的调整。谢谢! – user8259301
什么是您所查询的结果呢? – Jens
为什么A = 1会返回C = f和D = r?并标记DBMS – JohnHC
1,a,k,t呢?为什么不?你需要建立一个准则 – Horaciux