J'ai une requête SELECT où j'ai Qu'est-ce que je veux réaliser? Je veux mettre à jour tous les numéros de rangée de chaque partition, à l'exception de la dernière ligne de chaque partition. Alors supposons que nous ayons rownumber Je sais que nous pouvons exclure un numéro de premier rang à l'aide d'une condition simple dans la clause Where Like Comment puis-je y parvenir? Cordialement P> rownumber () code> fonction, j'ai donc un numéro de ligne par une partition dans le résultat. P>
1,2,3,4 code> et une autre partition avec 1,2 code> Je veux faire une clause de mise à jour pour mettre à jour tous les numéros de ligne, à l'exception du numéro 4 code> (première partition) et exclure le numéro de ligne 2 code> de la deuxième partition. P>
ROWNOMBER! = 1 code> mais dans ce cas, je veux le dernier numéro de la ligne de chaque partition et ce numéro est différent toutes partitions. P>
5 Réponses :
Vous pouvez utiliser une CTE actualisable, mais inverser la direction de la commande par code> dans Row_Number () code>:
Puisque vous n'avez fourni aucun SQL. Selon votre question, je peux penser à mettre votre résultat dans une sous-requête et à utiliser le max de rive-numérique. Ou mieux fournir des données SQL et des échantillons pour une meilleure clarté. P>
Vous pouvez simplement modifier la clause par code> de code> ASC à Desc code> ou Desc à ASC code> selon l'exigence et vous pouvez continuer à mettre à jour comme
Cela fonctionnerait aussi:
with temptbl as (
select *,max(rn) over (partition by id order by somethingelse) rnmax from dbo.yourtable
)
update temptbl
set [whatever you plan on updating]
where rn=rnmax;
Autant d'autres suggérons, tournez la commande sur sa tête le rendrait beaucoup plus simple que la ligne 1 serait la ligne que vous ne voulez pas mettre à jour.
Assurez-vous d'utiliser P>
.... ,row_number() over(partition by TEMP1 order by TEMP2 desc[or asc]) .... where rn <> 1
C'était dans la solution à votre Question précédente .