Помогите найти разницу (дельта) от значения, возвращенного из двух последних записей
-
05-07-2019 - |
Вопрос
Я использую 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 в вашем выберите заявление. Опять, извините, если я далеко от базы.