我可以访问一个我无法控制的大型数据仓库(*),只需编写查询。
其中一个不应包含重复项的表格,我需要选择与最近活动字段相关的行。例如:
Name | Date | Status | Type
Jon | 01/2/15 | Active | Ext
Jon | 30/1/15 | Inactive | Res
Sam | <null> | Active | Res
Guy | 01/2/15 | Active | Res
Guy | 02/2/15 | Active | Sem
Guy | 03/2/15 | Inactive | Key
我需要回复:
Name | Date | Status | Type
Jon | 01/2/15 | Active | Ext
Sam | <null> | Active | Res
Guy | 02/2/15 | Active | Sem
我已经进行了搜索,但无法真正找到一种方法来获得我需要的东西!
我到目前为止:
Select Name.acc, Date.acc, Status.acc, Type.acc
From DimAccounts as Acc
Where (ACC.AccountStatus = 'Current')
然后它有点乱!
我正在使用visual studio,以防万一(
)答案 0 :(得分:1)
这需要我书中的子查询。使用带有按日期排序并按组分区的row_number()的子查询将返回每个组的最新记录。
Select MainAcc.Name, MainAcc.Date, MainAcc.Status, MainAcc.Type,
as subAcc where MainAcc.Id = subAcc.Id
From DimAccounts as MainAcc inner join
(select id, ROW_NUMBER() OVER (PARTITION BY ID
ORDER BY Date DESC) rn
from DimAccounts) as subAcc on subAcc.Id = MainAcc.Id and subAcc.rn = 1
这里我假设你可以使用一些独特的ID。
编辑:由于原始问题,我重新编写了此查询。我认为这个版本更好。但是,原始的(使用带有前1的子查询)可能对您有用,具体取决于数据库中的限制/业务要求。
答案 1 :(得分:0)
这是我使用的未经简化的答案,我从我开始的另一个问题(SQL: Why is distinct and max not removing duplicates?)得到了:
select a.*
from (select a.*,
max(accountID) over (partition by propertyid) as max_tsd
from dimaccount a
where accountstatus = 'Current'
) a
where accountID = max_tsd;
随着增量逐渐增加,使用唯一ID结束。 Visual Studio表示它并不支持,但似乎工作正常!?