我的表Tags
有这些记录
Application ID TagName
/Blogs A75FB4D9-B0A2-45B1-A58D-9CC4E7FC1482 TagA
/News E1BDEF9D-4285-464F-88DC-00495B59D2AE TagA
/News 997F1721-335B-477A-9943-B91F0C21DE74 TagB
/Blogs BB1CEE87-AF8A-44D6-8A4B-EAB138BBEF10 TagB
我想只返回TagA
和TagB
的第一个匹配项,但返回的表必须与上面的内容完全相同(Application,ID,TagName),所以我希望它是:< / p>
/Blogs A75FB4D9-B0A2-45B1-A58D-9CC4E7FC1482 TagA
/News 997F1721-335B-477A-9943-B91F0C21DE74 TagB
我该怎么做?
答案 0 :(得分:7)
SELECT Application, Id, TagName
FROM
(SELECT Application, Id, TagName,
ROW_NUMBER() OVER (partition by TagName order by TagName) rn
FROM Table
) x
WHERE rn =1
答案 1 :(得分:1)
这可能会成功......
SELECT MIN(Application), MIN(ID), TagName FROM Table GROUP BY TagName
在此示例中,您将获得一个不可预测的ID ...
答案 2 :(得分:0)
在提供非SQL服务器特定答案的过程中
SELECT Application, Id, TagName
FROM Tags t
JOIN (
SELECT Application, TagName, MAX(InsertOrder) LatestInsert
FROM Tags
GROUP BY Application, TagName
) l ON l.Application = t.Application AND l.TagName = t.TagName AND l.LatestInsert = t.InsertOrder
这假定列的存在允许您识别“第一个”匹配 - 请注意,如果这是一个时间戳,则可能有两个具有相同插入时间的记录