【发布时间】: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