Microsoft SQL Server
Fonctions de fenêtre
Recherche…
Moyenne mobile centrée
Calculer une moyenne mobile centrée sur un prix sur 6 mois (126 jours ouvrables):
SELECT TradeDate, AVG(Px) OVER (ORDER BY TradeDate ROWS BETWEEN 63 PRECEDING AND 63 FOLLOWING) AS PxMovingAverage
FROM HistoricalPrices
Notez que, parce qu’il faudra jusqu’à 63 lignes avant et après chaque ligne renvoyée, au début et à la fin de la plage TradeDate, elle ne sera pas centrée: quand elle atteindra la valeur TradeDate la plus élevée, inclure dans la moyenne.
Recherchez l'élément le plus récent dans une liste d'événements horodatés
Dans les tables enregistrant des événements, il existe souvent un champ datetime qui enregistre l'heure à laquelle un événement s'est produit. Trouver l'événement le plus récent peut être difficile car il est toujours possible que deux événements aient été enregistrés avec des horodatages exactement identiques. Vous pouvez utiliser row_number () (ordre par ...) pour vous assurer que tous les enregistrements sont classés de manière unique, et sélectionnez le premier (où my_ranking = 1)
select *
from (
select
*,
row_number() over (order by crdate desc) as my_ranking
from sys.sysobjects
) g
where my_ranking=1
Cette même technique peut être utilisée pour renvoyer une seule ligne de n'importe quel jeu de données avec des valeurs potentiellement dupliquées.
Moyenne mobile des 30 derniers articles
Moyenne mobile des 30 derniers articles vendus
SELECT
value_column1,
( SELECT
AVG(value_column1) AS moving_average
FROM Table1 T2
WHERE ( SELECT
COUNT(*)
FROM Table1 T3
WHERE date_column1 BETWEEN T2.date_column1 AND T1.date_column1
) BETWEEN 1 AND 30
) as MovingAvg
FROM Table1 T1