0

这是我的场景。

我有一个包含 3 行的表,我想在存储过程中返回,行是电子邮件、名称和 ID。id 必须 = 3 或 4,并且电子邮件只能针对每个用户,因为有些有多个条目。

我有一个 Select 语句如下

SELECT
     DISTINCT email,
     name,
     id
from table
where
     id = 3
     or id = 4

好的相当简单,但是有些用户的条目既是 3 又是 4,所以它们出现两次,如果它们出现两次,我只想要那些 id 为 4 的用户。我将在下面举另一个例子,因为它很难解释。

桌子 -

Email              Name    Id
jimmy@domain.com   jimmy   4
brian@domain.com   brian   4
kevin@domain.com   kevin   3
jimmy@domain.com   jimmy   3

因此,在上述情况下,我想忽略 id 为 3 的 jimmy,有什么方法可以在没有硬编码的情况下做到这一点?

谢谢

4

4 回答 4

2
SELECT
     email,
     name,
     max(id)
from table
where
     id in( 3, 4 )
group by email, name
于 2012-07-05T20:48:37.320 回答
0

这是你想要达到的目标吗?

SELECT Email, Name, MAX(Id) FROM Table WHERE Id IN (3, 4) GROUP BY Email;
于 2012-07-05T20:49:22.330 回答
0

有时使用Having Count(*) > 1可能有助于查找重复记录。

select * from table group by Email having count(*) > 1

或者

select * from table group by Email having count(*) > 1 and id > 3.

之前提供的MAX(ID)从表中选择的解决方案听起来很适合这种情况。这可能是一个替代解决方案。

于 2012-07-05T20:55:28.543 回答
0

您使用的是什么 RDMS? 这将只返回一个 "Jimmy",使用RANK()

SELECT A.email, A.name,A.id
FROM SO_Table A
INNER JOIN(
SELECT 
email, name,id,RANK() OVER (Partition BY name ORDER BY ID DESC) AS COUNTER
FROM SO_Table B  
) X ON X.ID = A.ID AND X.NAME = A.NAME
WHERE X.COUNTER = 1

回报:

 email          name    id
 ------------------------------
 jimmy@domain.com   jimmy   4
 brian@domain.com   brian   4
 kevin@domain.com   kevin   3
于 2012-07-05T21:21:53.923 回答