sql从报告中删除重复

时间:2015-03-23 15:18:35

标签: sql visual-studio

我可以访问一个我无法控制的大型数据仓库(*),只需编写查询。

其中一个不应包含重复项的表格,我需要选择与最近活动字段相关的行。例如:

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,以防万一(

  • 我告诉他们有关问题的事情以及他们在他们自己的甜蜜时光中修复它们

2 个答案:

答案 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表示它并不支持,但似乎工作正常!?