我需要使用唯一TrackingIDs
从我的数据库中获取项目,并且InternalID
位于特定值之间。我希望所有行都包含内容,而不仅仅是TrackingIDs
基本上我想要这样的东西:
SELECT DISTINCT [TrackingID], *
FROM [MyDataBase]
Where [InternalID] <=45 AND [InternalID] >= 20
答案 0 :(得分:2)
我暂时没有在MSSQL中这样做,所以请原谅我,如果我的语法不正确但你可以使用子查询:
select distinct [TrackingID],
max(InternalID)
from MyDataBase
where [TrackingID] in
(select DISTINCT [TrackingID] as tracking
FROM [MyDataBase]
Where [InternalID] <=45 AND [InternalID] >= 20)
group by [TrackingID]
sqlfiddle链接:http://sqlfiddle.com/#!6/61e176/6
我必须使用max()
聚合函数来允许group by
,它给出了我想要的结果集。您的里程可能会有所不同,因为如果您的查询返回“远远太多”“唯一”ID,您可能会收回脏数据。如需更准确的解决方案,请提供部分数据或结果集。
答案 1 :(得分:0)
您可以在ROW_NUMBER
中使用CTE
:
WITH CTE AS(
SELECT TrackingID, InternalID, OtherColumns,
RN = ROW_NUMBER() OVER (PARTITION BY TrackingID ORDER BY OrderColumn)
From dbo.TableName
Where [InternalID] <=45 AND [InternalID] >= 20
)
SELECT TrackingID, InternalID, OtherColumns
FROM CTE
WHERE RN = 1