2011-09-19 2 views
0

je les données suivantesligne de mise à jour uniquement lorsque la date max

Date     Week ID  Tot_Seconds O_Seconds Week_ID 
8/14/2011 12:00:00 AM 5823 22180 170043  26043   18 
8/21/2011 12:00:00 AM 5824 22180 126471   0   18 

Je suis en train de mettre à jour une colonne dans une autre table la valeur de O_Seconds, où le match de la semaine et l'ID, mais je voudrais seulement mettre à jour où max (date) pour chaque semaine. La raison est que la table avec la source de données a des dates par semaine, où la table que je vais mettre à jour est quotidienne, et utilise la requête que j'ai actuellement, elle met à jour par exemple 26043 pour tous les jours où id et semaine requêtes où je vais additionner les valeurs de ces colonnes.

Existe-t-il un moyen de mettre à jour la date maximale?

Répondre

3

Quelque chose comme ça

La table dérivée est utilisée pour obtenir la 1ère ligne par semaine/ID

UPDATE 
    O 
SET 
    SomeCol = S.O_Second 
FROM 
    OtherTable O 
    JOIN 
    (
    SELECT 
     Week, ID, O_Second, 
     ROW_NUMBER() OVER (PARTITION BY Week, ID ORDER BY Date DESC) AS rn 
    FROM 
     ThisTable 
    ) S ON O.Week = S.Week AND O.ID = S.ID 
WHERE 
    S.rn = 1 

Pour SQL Server 2000 et plus tôt vous avez besoin d'un agrégat. Voir DBA.SE for more

+0

Ceci me donne le même résultat que ma requête, c'est-à-dire qu'elle est mise à jour tous les jours, et pas seulement le max. – Jessica

+2

@JP: exécutez la table dérivée séparément, vous verrez rn = 1 pour la date maximale par semaine/ID. C'est-à-dire, il extraira seulement la rangée où O_Second = 26043. Maintenant, pour que mettre à jour toutes les rangées dans "OtherTable" signifie que Week/ID * n'est pas assez * pour identifier une rangée. Cela * fonctionne * en fonction de ce que vous nous avez donné. Ajoutez plus de données et de structures de table s'il vous plaît – gbn

Questions connexes