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

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

Вопрос

Я использую 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 & amp; NetObjectID возвращен. Каждый раз, когда я пытаюсь, я получаю ошибки. data.NetObjectID недопустим в списке выбора, поскольку он не содержится ни в агрегатной функции, ни в предложении группировки по группам.

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

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

Это было полезно?

Решение

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

;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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top