>Sample data >EDP SVC PVC DATE >23733 10.12 15.12 2008-12-01 00:00:00.000 >23733 12.12 0.00 2008-12-02 00:00:00.000 >25555 100.12 111.12 2008-12-02 00:00:00.000 > >Expected result: >23733 12.12 15.12 2008-12-02 00:00:00.000 >25555 100.12 111.12 2008-12-02 00:00:00.000 >>
declare @dt datetime set @dt = GETDATE() declare @Test table (id int identity, EDP int, SVC float, PVC float, dUpdatedOn DATETIME) insert into @Test select 23733, 10.12, 15.12, @dt union all select 23733, 10.14, 15.12, @dt union all select 23733, 12.12, 0.00, '2008-12-02 00:00:00.000' union all select 25555, 100.12, 111.12, '2008-12-02 00:00:00.000' union all select 25555, 0.0, 114.12, '2008-12-03 00:00:00.000' ;with cte_SVC as (select T.id, T.EDP, T.SVC, T.PVC, T.dUpdatedOn from @Test T INNER JOIN (select ROW_NUMBER() OVER (PARTITION BY EDP ORDER BY dUpdatedOn DESC) as RowNumber, EDP, ID from @Test WHERE SVC <>0) SVC ON T.ID = SVC.ID where SVC.RowNumber = 1), cte_PVC as (select T.id, T.EDP, T.SVC, T.PVC, T.dUpdatedOn from @Test T INNER JOIN (select ROW_NUMBER() OVER (PARTITION BY EDP ORDER BY dUpdatedOn DESC) as RowNumber, EDP, ID from @Test WHERE PVC <>0) PVC ON T.ID = PVC.ID where PVC.RowNumber = 1), cte_MaxDates as (select EDP, MAX(dUpdatedOn) as Max_date from @Test group by EDP) select S.EDP,S.SVC, P.PVC, M.Max_Date from cte_SVC S INNER JOIN cte_PVC P ON S.EDP = P.EDP INNER JOIN cte_MaxDates M ON S.EDP = M.EDP