代码之家  ›  专栏  ›  技术社区  ›  BrunoLM

如何按名称选择不同的记录?

  •  3
  • BrunoLM  · 技术社区  · 14 年前

    我的桌子 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)完全相同,所以我希望它是:

    /Blogs        A75FB4D9-B0A2-45B1-A58D-9CC4E7FC1482    TagA
    /News         997F1721-335B-477A-9943-B91F0C21DE74    TagB
    

    我该怎么做?

    3 回复  |  直到 14 年前
        1
  •  7
  •   Michael Pakhantsov    14 年前

    SQL Server 2005数据库+

     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
    
        2
  •  1
  •   Yves M.    14 年前

    这也许能奏效。。。

    SELECT MIN(Application), MIN(ID), TagName FROM Table GROUP BY TagName
    

    在本例中,您将获得一个不可预测的id。。。

        3
  •  0
  •   Jon Freedman    14 年前

    在提供非sql server特定答案的过程中

    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
    

    这假设存在一列,允许您标识“第一个”匹配项 -请注意,如果这是一个时间戳,则可能有两条插入时间相同的记录