J'ai créé une requête pour calculer la consommation (Delta) des valeurs dans une table.
J'ai testé cela sur de nombreux ensembles de données et la valeur renvoyée est toujours nulle. P>
Voici un violon dB avec le jeu de données et la requête: dB Fiddle P>
La première ligne de l'ensemble de données est le point de départ et sera zéro. La deuxième ligne du tableau des résultats devrait être de 0,2, etc. P>
Je ne peux pas savoir pourquoi zéro revenir, je le fais clairement cela tout à fait faux. P>
The attendu La sortie ressemblerait à: p> Un point important est d'où une ligne est nulle, la valeur sera nulle. Mais la consommation de la ligne suivante sera moins la valeur avant le zéro. Ceci est représenté dans la rangée 8 et 9. P> TIA P> P>
3 Réponses :
Vous regroupez (entre autres colonnes) sur lisantDate code>. Cela signifie que chaque groupe sera composé d'une rangée. Dans ce groupe, max (canalvalue) code> sera le même que min (canalvalue) code>. Soustraire deux valeurs égales entraîne zéro. P>
Si vous modifiez votre type de données de Il va "mal" lorsque EDIT: Cette hypothèse semble le faire: em> p> DB <> violon P> P> canalvalue code> vers un décimal code> (peut-être un décimal (10,2) code>) Cela vous donne la majeure partie de la Résultats Vous après: canalvalue code> va à 0 code>, mais nous manquons la logique derrière vos besoins. Espérons que cela vous obtient la distance p>
Où une ligne est nulle, la valeur doit rester à zéro. Mais la consommation de la ligne suivante sera moins la valeur avant le zéro. Ceci est montré dans la rangée 8 et 9.
@Theorangegoblin ce que je deviné. Pourquoi les explications sont importantes.
Ajout d'un dB <> violon pour vous aussi @theorangegoblin qui semble obtenir les résultats corrects.
Je luttons toujours avec l'affaire SQL et oubliez que le plomb et le retard. Merci.
Vous êtes le bienvenu @theorangegoblin. Si cela fonctionne, veuillez le marquer comme solution afin que les futurs lecteurs sachent que la réponse vous a aidée. Merci.
Vos exigences dans la question sont un peu floues, mais les échantillons de données et commentaires les clarifient.
Fondamentalement, vous avez besoin de Une méthode serait un max cumulatif. Cependant, cela nécessiterait que les données augmentent toujours. Bien que cela puisse être le cas, cela n'est pas explicitement mentionné. P> Tout ce qui dit, le suivant renvoie vos résultats spécifiés: p> ICI est un dB <> FIDDLE. P> Certaines notes supplémentaires: P> Lag () code>, mais vous souhaitez également ignorer 0 code> valeurs. Il n'y a pas de moyen trivial d'accomplir cela dans SQL Server. La norme a ignorer null code> s, mais qui n'est pas implémentée. P>
DateTime code> sur un DateTime code>. li>
valeur code> de sorte qu'il s'agit d'une chaîne numérique plutôt qu'une chaîne. Stocker des données à l'aide des types appropriés. LI>
null code> plutôt que 0 code>. li>
ul> p>
Pouvez-vous expliquer votre logique. Votre expression pour
ComptoirConspation code> estmax (moulage (canalvalue en tant que numérique (10,2))) - min (canalvalue) code>, cependant,canalvalue code> estint code>. Unint code> moins Aint code> ne peut pas évaluer à undécimal code>, donc la valeur0.2 code > serait impossible pour cette expression. Les résultats attendus et une description d'eux aideraient grandement ici.Vous avez oublié d'inclure l'explication.
Le violon ajouté ceux-ci. J'ai changé le violon pour représenter la manière dont la table est réellement. Parfois, la valeur du canal peut être du texte (pour d'autres canaux, pas celui utilisé dans ce cas). Je les filtre dans une autre requête.
Encore une fois, encore une fois,
canalvalue code> est unint code> b>. Il ne peut pas stocker les valeurs décimales. La valeur8924.2 code> sera stockée sous forme8924 code>.@Larnu L'idée est que je passe à travers les données deux rangées à la fois, en prenant un de l'autre. En termes de chose INT, j'ai supprimé cela du violon, car le violon crée le type de données.