【发布时间】:2016-03-11 07:13:36
【问题描述】:
我正在创建一个文件组织系统,您可以在其中将内容项添加到多个文件夹。 我将数据存储在具有类似于以下结构的表中:
ID TypeID ContentID FolderID
1 101 1001 1
2 101 1001 2
3 102 1002 3
4 103 1002 2
5 103 1002 1
6 104 1001 1
7 105 1005 2
我正在尝试为每个唯一的 TypeID 和 ContentID 对选择第一条记录。对于上表,我希望结果是:
ID
1
3
4
6
7
如您所见,101 1001 和 103 1002 对分别添加到两个文件夹中,但我只想要它们添加到的第一个文件夹的记录。
但是,当我尝试以下查询时,我只得到至少有两个条目具有相同 TypeID 和 ContentID 的结果:
select MIN(ID)
from table
group by TypeID, ContentID
结果
ID
1
4
如果我将MIN(ID) 更改为MAX(ID),我会得到正确数量的结果,但我会得到添加到最后一个文件夹而不是第一个文件夹的记录:
ID
2
3
5
6
7
我使用GROUP BY 或MIN 错了吗?还有其他方法可以完成选择每个 TypeID ContentID 对的第一条记录的任务吗?
【问题讨论】:
-
将
min()更改为max()不应更改返回的行数。 -
如果我添加
ORDER BY ID,您的SELECT MIN(ID)查询将为我返回预期结果。两种情况下的行数都是 5。 -
@GordonLinoff 我知道 min() 和 max() 不应该返回不同数量的行,因此我的问题。
标签: sql sql-server select group-by min