我是SQL新手,想知道是否有人可以帮我解决问题。 我有一个包含以下信息的表:
firstname lastname group orderinggroup date
tim s A Facebook 6/4/13
tim s A Facebook 6/4/13
tim s A Facebook 6/4/13
dan d B Google 4/5/12
dan d B Google 4/5/12
这样的事情。我希望它看起来像这样
firstname lastname group orderinggroup date
tim s A Facebook 6/4/13
dan d B Google 4/5/12
蒂姆和丹没有重复的地方。我尝试使用DISTINCT,但只有一个列不同,我实际上有很多人名为Tim,Dan,A / B组等。我想知道是否有一种方法可以采取不同的多种角色,例如, firstname,lastname,group,orderinggroup和date的区别。姓氏很重要。谢谢!
答案 0 :(得分:0)
你真的可以使用max()函数来聚合一些列,并执行以下操作:
select
firstname,
lastname,
[group],
max(orderinggroup) as orderinggroup,
max([date]) as [date]
from (VALUES
('tim','s','A','Facebook','6/4/13'),
('tim','s','A','Facebook','6/4/13'),
('tim','s','A','Facebook','6/4/13'),
('dan','d','B','Google','4/5/12'),
('dan','d','B','Google','4/5/12')) as A (firstname,lastname,[group],orderinggroup,[date])
--replace this with your tablename
GROUP BY firstname, lastname, [group]
ORDER BY [group]
答案 1 :(得分:0)
这是糟糕的数据,DISTINCT会起作用。 DISTINCT实际上很棒。
SELECT DISTINCT * from table
为什么甚至列出列,除非有直接操作或子查询?在你的陈述中甚至没有JOIN。请告诉我评论为什么DISTINCT在这种情况下不起作用,因为你之前提到过它。
DISTINCT检查每列是否匹配值,如果它匹配记录B中记录A不匹配的值,它也会吐出记录B,因为它与A不同。即使之前的所有内容都是如此。它匹配。
在你的例子中:
firstname lastname group orderinggroup date
tim s A Facebook 6/4/13
tim s A Facebook 6/4/13
tim s A Facebook 6/4/13
dan d B Google 4/5/12
dan d B Google 4/5/12
让我们从蒂姆开始吧。每个领域都完全一样。因此,Distinct会将所有这些记录折叠成一行。丹一样。现在,如果您的实际数据库中的姓氏不同(应该反映在您的示例中),那么DISTINCT将无效。但是,你的问题的前提需要改变。您需要辨别出您希望在数据集中反映的内容。你想忽略姓氏吗?你想考虑一下吗?这些问题是相关的。 Group By也可以,但由于您没有进行聚合,因此没有必要。我希望这会有所帮助。
答案 2 :(得分:-2)
您可以使用以下查询:
SELECT firstname, lastname, group, orderinggroup, date
FROM tablename
GROUP BY firstname, lastname, group, orderinggroup, date
HAVING count(*) = 1;