消除记录

消除记录

我正在编写TSQL以消除存储过程中的某些数据。

该场景是有四个数据点ID,Recordnumer,OrderDate,RejectDate

  1. 该ID可以具有多个相同或不同的订单日期和拒绝日期。

我需要消除除1/01/1900之外的所有记录(这不是实际的拒绝,而是一个用该值替换的null)。 但是,如果在1/01/1900时没有拒绝,那么我应该删除除拒绝日期的最大值以外的所有记录。

记录号是我使用“基于分区的行”完成的记录。请说明一下:该图像是一个特定的记录,我需要将此规则应用于表中的所有记录。不同ID的预期结果以黄色突出显示

消除记录

myslippers 回答:消除记录

这是您想要的吗?

select t.*
from t
where t.reject_date = '1900-01-01' or
      t.reject_date = (select max(t2.reject_date)
                       from t t2
                       where t2.id = t.id
                      );

对于每个ID,这将保留reject_date为1900-01-01或拒绝日期为该ID的最大拒绝日期的行。

编辑:

这可能更合适:

select t.*
from t
where t.reject_date = (select t2.reject_date
                       from t t2
                       where t2.id = t.id
                       order by (case when t2.reject_date = '1900-01-01' then 1 else 2 end),t2.reject_date desc
                      );
,

您似乎不需要row_number()

 select id,OrderDate,RejectDate,max(case when RejectDate = '1900-01-01' then '9999-12-31' else RejectDate end) as rSum
         from tableA
         group by id,RejectDate
本文链接:https://www.f2er.com/3169410.html

大家都在问