Помогите найти разницу (дельта) от значения, возвращенного из двух последних записей - PullRequest
0 голосов
/ 05 мая 2009

Я использую MS SQL 2005 и создал запрос CTE для возврата значений из двух последних записей. Затем я использую это, чтобы найти дельту двух цифр. У меня есть рабочий запрос, но У меня проблемы с получением чего-либо, кроме фигуры дельты.

вот мой запрос:

;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

Я хочу вернуть Delta & NetObjectID. Каждый раз, когда я пытаюсь, я получаю ошибки. data.NetObjectID is invalid in the select list because it is not contained in either an aggregate function or the group by clause.

Если я пытаюсь добавить group by и т. Д. В конец запроса, я получаю дополнительную ошибку с жалобой на слово «group».

Я относительно новичок в SQL и собираюсь с ходу. Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 05 мая 2009

посмотрим, сработает ли что-то подобное.

;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
0 голосов
/ 05 мая 2009

Извините, я здесь новичок и не уверен в запросах CTE, однако, похоже, что после того, как вы определили Data, вы выбираете case ... как Delta FROM .... Это означает, что у вас есть только Delta в вашем выберите заявление. Снова, извините, если я далеко от базы.

...