我有一个表,我想返回有多个BSID的记录。
示例:
layout
问题:
如何仅返回此特定个人有三个不同客户ID的底部三个?
我试过写
FirstName LastName CustomerID
A Apple 12345
AB Orange 12451
AC Durian 44123
BODY SHOP 11223
BODY SHOP 11224
BODY SHOP 11225
但结果会返回所有6行。
答案 0 :(得分:0)
一个选项是使用您已编写的子查询来识别要保留的名字/姓氏对,然后将其连接回主表。
SELECT t1.*
FROM Profile t1
INNER JOIN
(
SELECT FirstName, Lastname, BSID
FROM Profile
GROUP BY FirstName, Lastname, BSID
HAVING COUNT(*) > 1
) t2
ON t1.Firstname = t2.Firstname AND
t1.Lastname = t2.Lastname AND
t1.BSID = t2.BSID
答案 1 :(得分:0)
在Amazon Redshift中,如果您在 group by 子句中也包含 BIS ,则它将返回所有值。由于使用BIS分组,因此没有重复记录。下面是您将收到的结果集,
FirstName LastName CustomerID Count
A Apple 12345 1
AB Orange 12451 1
AC Durian 44123 1
BODY SHOP 11223 1
BODY SHOP 11224 1
BODY SHOP 11225 1
你正在检查条款中的条件作为计数(*)>所以所有行都满足这个条件。
但您所需的结果如下所示,
FirstName LastName Count
A Apple 1
AB Orange 1
AC Durian 1
BODY SHOP 3
因此您必须修改您的查询,如下所示
select Firstname, lastname, count(*)
from table Profile
group by firstname, lastname
having count(*) > 1
只需从“选择”和“分组依据”条款中删除BIS。
希望这可以解决你的问题。