Aide pour trouver la différence (delta) à partir d'une valeur renvoyée des deux derniers enregistrements

StackOverflow https://stackoverflow.com/questions/824597

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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top