Helfen Sie den Unterschied bei der Suche nach (Delta) von einem Wert aus den letzten beiden Datensätze zurückgegeben
-
05-07-2019 - |
Frage
Ich bin mit MS SQL 2005 und ich habe eine CTE-Abfrage Rückgabewert aus den letzten beiden Datensätze erstellt. Ich diese dann mit dem Delta von zwei Zahlen zurück zu finden. Ich habe eine funktionierende Abfrage der Art aber Ich habe Probleme etwas anderes als die Delta-Figur zu bekommen.
hier ist meine Frage:
;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
Was ich nach ist das Delta & NetObjectID zurück zu bekommen. Jedes Mal, wenn ich versuche, erhalte ich Fehler.
data.NetObjectID is invalid in the select list because it is not contained in either an aggregate function or the group by clause.
Wenn ich Gruppe versuchen Sie, von etc .. Zum Ende der Abfrage erhalte ich weitere Fehler beschweren sich über das Wort ‚Gruppe‘.
Ich bin relativ neu in SQL und ich bin Kommissionierung Dinge, wie ich gehen. Jede mögliche Hilfe dankbar empfangen werden.
Lösung
sehen, ob so etwas wie dies funktionieren wird.
;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
Andere Tipps
Sorry, ich bin hier ganz neu und ich bin nicht sicher, CTE-Abfragen, aber es sieht aus wie nach Daten definieren, Sie Fall sind die Auswahl ... als Delta FROM .... Bedeutung nur Delta haben in Ihrem select-Anweisung. Auch hier, sorry, wenn ich weg Basis.