SQL帮助。试图达到某个结果集

时间:2014-03-27 16:03:12

标签: sql sql-server-2012

我不认为这是可能的,但我不是SQL大师,所以我想确定一下。我们正在使用SQL Server 2012。

我们有这样的表结构:

 Id | LastChanged | TypeId  
 1 | 01/01/2014 | 1  
 1 | 02/02/2014 | 1  
 2 | 03/03/2014 | 1  
 2 | 04/04/2014 | 1  
 3 | 01/01/2014 | 1  
 3 | 02/02/2014 | 1  
 4 | 02/02/2014 | 2  
 4 | 03/03/2014 | 2  

-Id和LastChanged是主键 -LastChanged是DateTime数据类型 - 此设置的原因是创建更改历史记录。

"活跃"记录将是最近日期的记录。如果我要活跃"活跃"记录我会这样做:

 SELECT TOP 1  Id, LastChanged, TypeId  
 WHERE   Id = 1  
 ORDER BY LastChanged desc

上述查询的结果是:

  

1 | 02/02/2014 | 1

我试图获得的结果集是让"活跃的" TypeId记录:

  

1 | 02/02/2014 | 1
  2 | 04/04/2014 | 1
  3 | 02/02/2014 | 1

2 个答案:

答案 0 :(得分:2)

我认为这将是一个更简单的解决方案。实现每个Id的最高更改日期

SELECT 
 Id
,MAX(LastChanged)
,TypeId  
FROM YourTable

GROUP BY 
 Id
,TypeId

如果您只希望结果集显示数字为1的类型ID,则

SELECT 
 Id
,MAX(LastChanged)
,TypeId  
FROM YourTable

WHERE TypeId = 1

GROUP BY 
 Id
,TypeId

答案 1 :(得分:1)

您可以使用CTEROW_NUMBER来获取上次有效记录。我想你想按TypeID过滤:

WITH CTE AS
(
    SELECT  *,
            RN = ROW_NUMBER() OVER(PARTITION BY ID ORDER BY LastChanged DESC)
    FROM dbo.TableName
    WHERE  TypeID = @TypeID
)
SELECT Id, LastChanged, TypeId  
FROM CTE
WHERE RN = 1

以下是演示:http://sqlfiddle.com/#!6/d7b25/3/0