选择具有特定ID的不同项目

时间:2014-08-20 15:04:30

标签: sql sql-server-2012 distinct

我需要使用唯一TrackingIDs从我的数据库中获取项目,并且InternalID位于特定值之间。我希望所有行都包含内容,而不仅仅是TrackingIDs

基本上我想要这样的东西:

SELECT DISTINCT [TrackingID], *
  FROM [MyDataBase]
  Where [InternalID] <=45 AND [InternalID] >= 20

2 个答案:

答案 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

她的演示:http://sqlfiddle.com/#!6/61e176/9/0