继承我的情景。
我有一个包含3行的表,我想在存储过程中返回,行是电子邮件,名称和ID。 id必须= 3或4,并且电子邮件必须仅限每个用户,因为有些人有多个条目。
我有一个Select语句如下
SELECT
DISTINCT email,
name,
id
from table
where
id = 3
or id = 4
好的相当简单,但有一些用户的条目同时为3和4,所以它们出现两次,如果它们出现两次,我只想要剩下4个ID的用户。我将在下面给出另一个例子,因为它难以解释。
表 -
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,没有硬编码的任何方式吗?
由于
答案 0 :(得分:2)
SELECT
email,
name,
max(id)
from table
where
id in( 3, 4 )
group by email, name
答案 1 :(得分:0)
这是你想要达到的目标吗?
SELECT Email, Name, MAX(Id) FROM Table WHERE Id IN (3, 4) GROUP BY Email;
答案 2 :(得分: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)
听起来很适合这种情况。
这可能是另一种解决方案。
答案 3 :(得分:0)
您使用的是什么RDMS? 这将只返回一个“吉米”,使用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