Sql 按一列列出的唯一记录

Sql 按一列列出的唯一记录,sql,Sql,我已经在这方面工作了很长时间,现在无法得到答案。 我有一个4列的表。我需要返回其中的两列,A和B。 但是,我需要通过第一列A筛选数据。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 哪个查询会给

我已经在这方面工作了很长时间,现在无法得到答案。 我有一个4列的表。我需要返回其中的两列,A和B。 但是,我需要通过第一列A筛选数据。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\u 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
用这个

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

查询的结果是什么?为什么A=1应该返回C=f和D=r?标记dbmsw关于1,a,k,t是什么?为什么不呢?您需要为此尝试建立一个标准
GROUPBY
,从表GROUPBY a中选择a,min(b),min(c),min(d),如果显示的b,c,d项不重要,如果您使用的是MySQL 5.7,您还需要修复SQL模式(
设置SQL_模式=“”
),然后才能正常工作。如果aI设置sql模式,可能会这样。但我不知道该怎么做,你是主人。这是我唯一能工作的!我必须对其进行调整以使其正常工作:我更改了“从myTable)mt”>>>“从myTable WHERE C='f')mt”。现在它工作得很好。似乎没有人理解的问题是,如果在多个列上使用DISTINCT,那么查询将返回更多的行,而这些行将不会是DISTINCT的。非常感谢你的帮助!你的工作也很好。我必须做出和皮特的密码一样的调整。谢谢
with cte as 
(
select * , row_Number() over (Partition by A order by A) as aa from myTable
)
select * from cte where aa = 1