2009-11-03 3 views
0

J'ai une table appelée ÉTATMACHINE:requête SQL pour obtenir la somme et les derniers enries

ID Successfiles totaldata Backupsessiontime 
> 1 3 988 1256637314 
> 2 21 323 1256551419 
> 3 8 23 1256642968 
> 4 94 424 1256642968 
> 1 42 324 1256810937 
> 1 0 433 1256642968 

Maintenant ici je veux groupe par ID où les successfiles et les données totales obtient additionnées, mais afficher uniquement la dernière Backupsessiontime Je peux le faire séparément mais pas ensemble. Des suggestions ????

Pour ce faire séparement:

pour obtenir la somme:

select ID, sum(NumOfSuccessFiles), sum(TotalData) 
from MachineStat 
group by ID; 

pour obtenir le dernier:

With idT as (
select ID 
from MachineStat 
group by ID 

) 
select applyT.* 
from idT p 
CROSS APPLY (
select top 1 ID,BackupSessionTime from MachineStat where eID=p.ID 
order by MachineID desc 
) as applyT 

Répondre

3

Il semble que vous voulez faire

select ID, sum(NumOfSuccessFiles), sum(TotalData), max(Backupsessiontime) from MachineStat group by ID;

+0

i aurait dû savoir que ... l'homme merci ... – user175084

3

Vous pouvez utiliser une fonction d'agrégation qui répondrait à vos besoins:

select 
    ID, 
    sum(NumOfSuccessFiles) TotalNumOfSuccessFiles, 
    sum(TotalData) TotalData, 
    max(Backupsessiontime) LastBackupsessiontime 
from 
    MachineStat ms 
group by 
    ID 

Ou vous pouvez utiliser une sous-requête dans votre requête principale, si vous avez besoin d'une logique de tri plus compliquée.

select 
    ID, 
    sum(NumOfSuccessFiles) TotalNumOfSuccessFiles, 
    sum(TotalData) TotalData, 
    (select top 1 Backupsessiontime from MachineStat where ID = ms.ID order by ...) LastBackupsessiontime 
from 
    MachineStat ms 
group by 
    ID 
Questions connexes