Comment calculer la pente en SQL
J'ai des données dans une base de données sql et j'aimerais calculer la pente. Les données de cette mise en page:
Date | Keyword | Score
2012-01-10 | ipad | 0.12
2012-01-11 | ipad | 0.17
2012-01-12 | ipad | 0.24
2012-01-10 | taco | 0.19
2012-01-11 | taco | 0.34
2012-01-12 | taco | 0.45
J'aimerais que le résultat final ressemble à ceci par la création d'une nouvelle table à l'aide de SQL:
Date | Keyword | Score | Slope
2012-01-10 | ipad | 0.12 | 0.06
2012-01-11 | ipad | 0.17 | 0.06
2012-01-12 | ipad | 0.24 | 0.06
2012-01-10 | taco | 0.19 | 0.13
2012-01-11 | taco | 0.34 | 0.13
2012-01-12 | taco | 0.45 | 0.13
Pour compliquer les choses, tous les mots-clés ont 3 dates de données, certains ont seulement 2 par exemple.
Le plus simple, le SQL, le mieux depuis ma base de données est propriétaire et je ne suis pas tout à fait sûr de ce que les formules sont disponibles, même si je sais qu'il peut faire OVER(PARTITION BY) si ça peut aider. Merci!!!!
Mise à JOUR: je définir la pente au mieux y=mx+p aka dans excel, il serait =pente()
Voici un autre exemple que j'ai l'habitude de manipuler dans excel:
date keyword score slope
1/22/2012 water bottle 0.010885442 0.000334784
1/23/2012 water bottle 0.011203949 0.000334784
1/24/2012 water bottle 0.008460835 0.000334784
1/25/2012 water bottle 0.010363991 0.000334784
1/26/2012 water bottle 0.011800716 0.000334784
1/27/2012 water bottle 0.012948411 0.000334784
1/28/2012 water bottle 0.012732459 0.000334784
1/29/2012 water bottle 0.011682568 0.000334784
Comment définissez-vous la pente? Si vous avez plus de deux points de données, vous êtes juste de prendre la pente à partir du premier point au dernier point? Ou êtes-vous essayer de tirer un meilleur ajustement de la ligne entre tous les points? Si donc, à l'aide des moindres carrés linéaire ou autres algorithmes? Voulez-vous forcer la ligne de frapper l'un des points (sachant que l'on va diminuer la qualité globale de l'ajustement)?
Il y a quelques régression linéaire des fonctions d'Oracle. docs.oracle.com/cd/B10501_01/server.920/a96540/...
Je n'ai pas regr_slope disponible 🙁
est correcte, vous devez utiliser la régression linéaire, et son premier lien semble assez bonne. Un simple
y = mx + c
ne fonctionnera pas tant que vos données-les points ne pas, et ont très peu de chances de parvenir à un parfait "courbe". Aussi garder à l'esprit que, avec seulement 2 à 3 points de votre courbe va être assez inexact de toute façon.OriginalL'auteur datayoda | 2012-01-31
Vous devez vous connecter pour publier un commentaire.
La plus propre est celle que je pourrais faire:
Il utilise Régression Linéaire Simple pour calculer la pente.
Résultat:
Chaque système de base de données semble avoir une approche différente de la conversion des dates de chiffres:
TO_SECONDS(date)
ouTO_DAYS(date)
TO_NUMBER(TO_CHAR(date, 'J'))
oudate - TO_DATE('1','yyyy')
CAST(date AS float)
(ou l'équivalentCONVERT
)OriginalL'auteur Markus Jarderot
Si vous êtes à la définition de la pente comme juste la pente à partir du premier point au dernier point, et si le score n'augmente avec la date, alors vous pouvez obtenir le résultat ci-dessus:
Cependant, si vous voulez la régression linéaire, ou si les scores peuvent diminuer comme augmenter avec le temps, vous aurez besoin de quelque chose de plus complexe.
OriginalL'auteur gcbenison
Exprimés en décimal ne donne pas des résultats corrects pour moi, il n'est pas linéaire pour les dates. Utilisation
TO_DAYS(date_field)
au lieu de cela, cela devient correct.OriginalL'auteur Peter Stridsberg