删除重复的日志记录

时间:2017-11-13 20:42:32

标签: sql-server

所以我有一个搜索我的items表的查询并返回带有prodstat<>的所有记录NULL,它会执行一些汇总的库存字段。

我已将此查询绑定到另一个表,该表是审核日志表,它返回新的prodstat,旧的prodstat,更改了它以及日期。

问题是,如果字段有多处更改,它会引入额外的记录。我试图在创建日志记录时使用max来仅提取最新记录。问题是当我将它添加到我的其他查询时,我只获取日志文件中已更改的记录。

我正在寻找的是带有prodstat的所有商品记录<> Null和创建的字段,newvalue,oldvalue从日志表更新。

数据输出应如下所示

prodstat  item.num  item.desc  onhandinv  newprodstat   oldprodstat  changeddate

这是我到目前为止所做的:

    Select 
      item.Uf_ProdStat,
      item.item,
      item.description,
      a.UpdatedBy,
      (Select SUM(itemloc.qty_on_hand) 
         from itemloc 
           where itemloc.item = item.item and itemloc.loc = 'Main')as qty_onhand,
      a.createDate,
      a.OldValue,
      a.NewValue    
    From item
      left join AuditLog a on item.item = a.KeyValue and MessageType = 10010
      inner join (select max(createdate)as maxdate, keyvalue
                from AuditLog
            where MessageType = 10010 and NewValue in 
            ('EOL','DISC','WHL','NNO')  
            group by KeyValue)
            tm on A.KeyValue = tm.KeyValue and A.CreateDate = tm.maxdate    
    Where   Uf_ProdStat is Not Null

这只返回与日志文件中已更改记录匹配的3条记录。我应该有100,日志文件部分现在正在添加。

1 个答案:

答案 0 :(得分:0)

所以我一直在研究内部连接,这个似乎给了我所需要的一切......

    From item
          --left join AuditLog a on item.item = a.KeyValue and MessageType = 10010
          left join (select a.messagetype,a.UserName as updatedby,a.CreateDate as recorddate,a.OldValue,a.keyvalue, a.NewValue
                    from AuditLog A
                        right join ( select max(createdate)as maxdate, keyvalue
                                        from AuditLog
                                        where MessageType = 10010 and NewValue in('EOL','NNO','DISC','WSL')
                                        group by KeyValue)
                    tm on A.KeyValue = tm.KeyValue and A.CreateDate = tm.maxdate) AL on AL.keyvalue = item.item