Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Query design help
Message
Information générale
Forum:
Microsoft SQL Server
Catégorie:
Syntaxe SQL
Versions des environnements
SQL Server:
SQL Server 2005
Application:
Desktop
Divers
Thread ID:
01365555
Message ID:
01365796
Vues:
10
>Thank you for you reply. It is possible that my spec were not clear enough.
>
>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
>
>
>The bottom line is when there are multiple records for one EDP I would like the PVC and SVC be taken from the max(date) UNLESS the value of either PVC or SVC is zero then I want the latest none zero value.
>
>Hope I made myslef clear.
>DAniel

Daniel,

Try this
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
If it's not broken, fix it until it is.


My Blog
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform