初学者SQL - 获取DISTINCT条目(按列)

时间:2014-06-16 13:02:25

标签: sql tsql

我有一个名为OnlineSpeakers的表,可以记录(时间)人(SpeakerName)在线讲话的时间。它每5分钟记录当前正在讲话的人,所以例如Bob会有

2014-06-06 07:05, Room 205, Bob
2014-06-06 07:00, Room 205, Bob
2014-06-06 06:55, Room 205, Bob
...
2014-06-06 06:00, Room 205, Bob

表格如下:

OnlineSpeakers

  • ID
  • 时间
  • ROOMNAME
  • SpeakerName

我想提取已注册的最新发言人名单。所以对鲍勃来说,这将是'鲍勃,2014-06-06 06:00',这将标志着鲍勃作为演讲者首次亮相。

我知道如何为鲍勃得到这个:

SELECT TOP (1) Time, SpeakerName
FROM     OnlineSpeakers
WHERE  (SpeakerName = 'Bob')
ORDER BY Time ASC

但我不知道如何在OnlineSpeakers中为每个演讲者提供它

SELECT DISTINCT SpeakerName
FROM     OnlineSpeakers

我想要一个这样的列表:

2014-06-06 06:00, Room 205, Bob
2014-06-06 05:00, Room 205, Tim
2014-06-06 03:55, Room 205, George
2014-06-06 06:00, Room 205, Martin
...

我尝试用SpeakerName IN替换“SpeakerName ='Bob'”“”,然后是一个唯一名称列表,但是它只是为每个发言者提供了多次表格的完整列表。

感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

您需要Group By运营商。

select SpeakerName, Min(Time) from OnlineSpeakers
Group by SpeakerName

这将把你所有的人和他们按照说话者的名字分组,当你这样做时,你需要找到一种方法来决定你想要显示哪个时间范围(这称为聚合函数)。但是,您已经告诉我们您想要第一个,因此您可以使用Min功能。

OnlineSpeakers全部带给我,按SpeakerName分组,并在每个小组中加入第一个时间。