【问题标题】:How to select unique values looking at only one column in SQL Server?如何选择仅查看 SQL Server 中的一列的唯一值?
【发布时间】:2014-12-01 06:13:17
【问题描述】:

我使用以下查询(在 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

【问题讨论】:

  • 使用 ROW_NUMBER OVER (PARTITION BY itemID ORDER BY someother col) 作为 rn.. WHERE rn=1
  • 这很大程度上取决于您想查看每个 itemID 的哪个实例...
  • @DanielE.:谢谢 - 我只想查看最新的实例,即具有最新 modTime 的实例。
  • 然后尝试@Mihai 用Order By ModTime desc 回答。请注意,整个查询需要包装在外部选择中才能使用where rn=1
  • 谢谢 - 抱歉,我不确定我是否理解如何实现这一点,因为我对 SQL 还是很陌生。

标签: sql sql-server select stored-procedures distinct


【解决方案1】:

会是这样的:

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 'Deleted' 的位置从第一个查询更改为第二个。

【讨论】:

  • 这很完美,而且很有帮助——非常感谢!
猜你喜欢
  • 2014-07-14
  • 1970-01-01
  • 1970-01-01
  • 2013-06-09
  • 1970-01-01
  • 2020-11-10
  • 2019-04-13
  • 2023-01-26
  • 2012-12-06
相关资源
最近更新 更多