Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/06/2011, 10h20   #1
Rédacteur/Modérateur
 
Inscription : juin 2003
Messages : 4 176
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 176
Points : 4 280
Points : 4 280
Par défaut Update de la dernière ligne

Bonjour,

je fais un update dans une table, je voudrais par date et faire l'update que de la dernière ligne mise à jour ..

voilà ma requete actuelle:

Code :
1
2
3
4
5
6
7
 
UPDATE  UA 
SET    UA.STATUS_ID = 75, UA.UPDATE_DATE = @date,UA.UPDATED_BY = @sys
 
FROM TABLE  UA 
JOIN #TEMP1 t  ON t.USER_ID = UA.USER_ID
WHERE  UA.STATUS_ID = 87
__________________
Articles: Richfaces - JBosstools pour JSF.
Sniper37 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 10h51   #2
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 723
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 723
Points : 6 844
Points : 6 844
Bonjour,

Tu pourrais nous donner un exemple de ce que tu veux faire ? ... avec un jeu de données.

++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 11h24   #3
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Bonjour,


Il est vrai que la demande n'est pas très claire

Les structures des tables en jeu seraient utiles aussi


que donne ceci :
Code SQL :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
UPDATE  UA 
SET    
	UA.STATUS_ID = 75, 
	UA.UPDATE_DATE = @date,
	UA.UPDATED_BY = @sys
FROM LaTABLE  UA 
INNER JOIN (
	SELECT 
		[USER_ID] AS UI,
		MAX(UPDATE_DATE) AS MaxDte
	FROM LaTable
	GROUP BY [USER_ID]
)UMax
	ON UA.USER_ID = UMax.UI
	AND UA.UPDATE_DATE = UMax.MaxDte
INNER JOIN #TEMP1 t  ON t.USER_ID = UA.USER_ID
WHERE  UA.STATUS_ID = 87
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 11h33   #4
Rédacteur/Modérateur
 
Inscription : juin 2003
Messages : 4 176
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 176
Points : 4 280
Points : 4 280
au fait voilà la structure de la table :

MA_TABLE

USER_ID
STATUS_ID
CHAMP1
CHAMP2
CHAMP3
UPDATE_DATE
CREATION_DATE
CREATED_BY



la table #TEMP1 me permet de filtrer les lignes à mettre à jour, mais, il se peut que les lignes soient dupliquées en base mais avec des dates (update/creation) différente (faux doublons)

je voudrais ne pas faire la mise à jour et avoir des doublons, c'est pour celà que je me suis dit s'il est possible de faire l'update que de la dernière ligne mise à jour qui correspond au critère de la jointure mon problème serait résolu.

Merci ..

quelque chose comme

update top 1 from MA_TABLE .. order by update_date .
__________________
Articles: Richfaces - JBosstools pour JSF.
Sniper37 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 13h46   #5
Membre chevronné
 
Inscription : juillet 2006
Messages : 1 194
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 1 194
Points : 746
Points : 746
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
UPDATE  UA 
SET    UA.STATUS_ID = 75, UA.UPDATE_DATE = @date,UA.UPDATED_BY = @sys
 
FROM (
SELECT
UA2.*
, ROW_NUMBER() OVER (PARTITION BY UA2.USER_ID, ORDER BY UA2.CREATION_DATE DESC) AS ROW
FROM UA AS UA2 
WHERE  UA2.STATUS_ID = 87
) AS UA2
INNER JOIN #TEMP1 t  ON t.USER_ID = UA2.USER_ID
WHERE UA2.ROW = 1
AND UA.STATUS = UA2.STATUS -- ou 87
AND UA.USER_ID = UA2.USER_ID
AND UA.CREATION_DATE = UA2.CREATION_DATE
Sergejack est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2011, 15h48   #6
Rédacteur/Modérateur
 
Inscription : juin 2003
Messages : 4 176
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 176
Points : 4 280
Points : 4 280
Merci à tous,

j'ai fais autrement,

Code :
1
2
3
4
5
6
7
8
9
10
11
 
UPDATE  UA
 
FROM U_A UA JOIN
 
(
 
SELECT TOP 1 * FROM  U_A
JOIN ..
WHERE ...
) UA1  ON UA.USER_ID = UA1.USER_ID
__________________
Articles: Richfaces - JBosstools pour JSF.
Sniper37 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h39.


 
 
 
 
Partenaires

Hébergement Web