我不认为这是可能的,但我不是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
答案 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)
您可以使用CTE
和ROW_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