繁体   English   中英

如何选择仅查看SQL Server中一列的唯一值?

[英]How to select unique values looking at only one column in SQL Server?

我使用以下查询(在SQL Server 2008中)从表中获取最后20条记录。

该查询按预期工作,我唯一的问题是这是一个日志表,其中某个itemID可以出现几次。 有没有办法我只能在这里选择唯一的itemID?

我尝试使用DISTINCT,但这在这里不起作用,因为不是整个行都是重复的,只是itemID可以出现多次(然后时间戳或其他数据不同)。

我的SQL:

ALTER PROCEDURE [dbo].[RC_FetchUpdates]
    @departmentID int
AS
BEGIN
    SET NOCOUNT ON;

    SELECT      TOP 20 A.itemID,
                A.lastUpdate,
                CONVERT(VARCHAR(11), A.modTime, 106) AS modTime,
                A.modBy,
                B.itemName,
                B.linkRef
    FROM        RC_LogLinks A
    LEFT JOIN   RC_Links B
    ON          B.itemID = A.itemID
    WHERE       B.departmentID = @departmentID
    AND         A.lastUpdate <> 'Deleted'
    ORDER BY    A.modTime desc, B.itemName
    FOR XML PATH('updates'), ELEMENTS, TYPE, ROOT('ranks')

END

将会是这样的:

WITH rankedLogLinks AS (
    SELECT ROW_NUMBER() OVER (PARTITION BY A.itemID ORDER BY A.modTime DESC) AS rownum, A.itemID, A.lastUpdate, A.modTime, A.modBy
    FROM RC_LogLinks A
    WHERE A.lastUpdate <> 'Deleted'
)
SELECT  r.itemID, r.lastUpdate, CONVERT(VARCHAR(11), r.modTime, 106) AS modTime, r.modBy, B.itemName, B.linkRef
FROM rankedLogLinks r
    LEFT JOIN   RC_Links B
       ON B.itemID = r.itemID
    WHERE B.departmentID = @departmentID
       AND r.rownum = 1
    ORDER BY B.itemName
    FOR XML PATH('updates'), ELEMENTS, TYPE, ROOT('ranks')
;

您可能需要根据需要将WHERE A.lastUpdate <>“已删除”的位置从第一个查询更改为第二个查询。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM