Existe-t-il un meilleur moyen d'obtenir le percentile mobile à l'aide d'une fonction Windows sans utiliser de table CTE ou dérivée, etc.? Je voulais tout mettre dans une requête en utilisant les fonctions de Windows, mais im ayant un temps fou de le convertir en une valeur centile. La seule résolution que je pouvais penser était de créer les valeurs numériques, puis faire le calcul avec la table. Juste serait cool s'il y avait une façon plus simple de le faire?Détermination du percentile Différence par rapport au décalage, au plomb et à la ligne courante en utilisant la fonction Windows?
WITH numberdata AS
(
SELECT
custid
,orderid
,LAG(VAL) OVER(PARTITION BY CUSTID ORDER BY ORDERID DESC) as lagval
,LEAD(VAL) OVER(PARTITION BY CUSTID ORDER BY ORDERID DESC) as leadval
,val - LAG(VAL) OVER(PARTITION BY CUSTID ORDER BY ORDERID DESC) as lagvaldiff
,val - LEAD(VAL) OVER(PARTITION BY CUSTID ORDER BY ORDERID DESC) as leadvaldiff
,val
FROM sales.ordervalues
)
select
CAST((lagval)/val AS NUMERIC(10,2)) as lagpctdiff
,CAST((leadval)/val AS NUMERIC(10,2)) as leadpctdiff
,CAST((lagvaldiff)/leadvaldiff AS NUMERIC(10,2)) as pctdiff
,val
,lagval
from numberdata
order by custid desc
Ceci est juste moi étudier pour en savoir plus sur le code en préparation d'un test. Les données proviennent de la table sales.ordervalues située dans la formation db TSQL_2012.
Comment puis-je convertir les colonnes leadvaldiff et lagvaldiff en un pourcentage sans le placer dans un CTE?
Peut-être pourriez-vous nous fournir un petit échantillon de données? Aussi - en ce moment, vous comparez la valeur d'un enregistrement à la valeur des enregistrements suivants et précédents. Est-ce ce que vous voulez accomplir, et pourquoi? – dybzon
Oui, veuillez fournir un exemple de jeu de données avec un exemple de la manière dont vous attendez que les résultats s'affichent. –
[jeu de données] (https://docs.google.com/spreadsheets/d/1991QZ8pzoZmfIxJcHv21Cm52Z-k0joerw7jngRYMwCQ/edit?usp=sharing) Merci d'avoir jeté un coup d'œil! – Zeluvius