Aide pour trouver la différence (delta) à partir d'une valeur renvoyée des deux derniers enregistrements
-
05-07-2019 - |
Question
J'utilise MS SQL 2005 et j'ai créé une requête CTE pour renvoyer les valeurs des deux derniers enregistrements. J'utilise ensuite cela pour trouver le delta de deux figures retournées. J'ai une requête de travail de toutes sortes mais J'ai du mal à obtenir autre chose que le chiffre delta.
voici ma requête:
;with data as(
SELECT
NetObjectID,
RawStatus,
RowID,
rn
from(
SELECT
CustomPollerAssignmentID AS NetObjectID,
RawStatus,
RowID,
row_number() over(order by DateTime desc)as rn
FROM CustomPollerStatistics_Detail
WHERE
(CustomPollerAssignmentID='a87f531d-4842-4bb3-9d68-7fd118004356')
) x where rn<=2
)
SELECT
case when
max(case rn when 1 then RawStatus end) > max(case rn when 2 then RawStatus end)
then
max(case rn when 1 then RawStatus end) - max(case rn when 2 then RawStatus end)
else
max(case rn when 2 then RawStatus end) - max(case rn when 1 then RawStatus end)
end as Delta
from data having
(SELECT
case when
max(case rn when 1 then RawStatus end) > max(case rn when 2 then RawStatus end)
then
max(case rn when 1 then RawStatus end) - max(case rn when 2 then RawStatus end)
else
max(case rn when 2 then RawStatus end) - max(case rn when 1 then RawStatus end)
end
from data) >= 1
Ce que je recherche, c’est d’obtenir le Delta & amp; NetObjectID renvoyé. Chaque fois que j'essaie, je reçois des erreurs.
data.NetObjectID n'est pas valide dans la liste de sélection car il ne figure ni dans une fonction d'agrégat ni dans la clause group by.
Si j'essaie d'ajouter un groupe par etc. à la fin de la requête, je reçois une erreur supplémentaire en me plaignant du mot "groupe".
Je suis relativement nouveau en SQL et je récupère les choses au fur et à mesure. Toute aide serait reçue avec gratitude.
La solution
voir si quelque chose comme ça va marcher.
;with data as
(
SELECT
NetObjectID,
RawStatus,
RowID,
rn
from
(
SELECT
CustomPollerAssignmentID AS NetObjectID,
RawStatus,
RowID,
row_number() over(order by DateTime desc)as rn
FROM CustomPollerStatistics_Detail
WHERE
(
CustomPollerAssignmentID='a87f531d-4842-4bb3-9d68-7fd118004356'
)
) x
where rn<=2
)
select
NetObjectID,
max(RawStatus)-min(RawStatus) as Delta
from data
group by NetObjectID
Autres conseils
Désolé, je suis très nouveau ici et je ne suis pas sûr des requêtes CTE, mais après que vous ayez défini Data, vous sélectionnez le cas ... en tant que Delta FROM ... Ce qui signifie que vous n'avez que Delta dans votre sélectionnez la déclaration. Encore une fois, désolé si je suis hors de la base.