J'ai une table qui contient 2 colonnes qui stockent les valeurs de certains seuils pouvant être atteints. Les colonnes du tableau sont : ThresholdValue (INT), Atteint (BIT) et le tableau ressemble à ceci :

ThresholdValue | Reached
------------------------
10000          | 0
20000          | 0 
30000          | 0
45000          | 0
50000          | 0

Je dois mettre à jour la colonne atteinte en fonction du seuil atteint. Par exemple, lorsque la valeur atteinte est 25000, je veux que la deuxième ligne soit définie sur 1 pour qu'elle ressemble à ceci

ThresholdValue | Reached
------------------------
10000          | 0
20000          | 1
30000          | 0
45000          | 0
50000          | 0

Quelle est la manière la plus simple de résoudre ce problème ? Tous les conseils seront fortement appréciés

0
bapster 21 févr. 2020 à 15:00

1 réponse

Meilleure réponse

Vous pouvez utiliser une sous-requête pour identifier la ligne :

update t
    set reached = 1
    from (select top (1) t.*
          from t
          where t.ThresholdValue <= 25000
          order by ThresholdValue desc
         ) t;

Une autre approche consisterait à examiner la valeur suivante :

update t
    set reached = 1
    from (select t.*, lead(ThresholdValue) over (order by ThresholdValue) as next_tv
          from t
         ) t
     where t.ThresholdValue <= 25000 and
           (t.next_tv > 25000 or t.next_tv is null);
2
Gordon Linoff 21 févr. 2020 à 12:02