[英]SQL Server CROSS APPLY
我正在嘗試在此查詢中添加CROSS APPLY
。 我以前從未做過,但是一位同事提出了建議,這似乎很有意義。 我遇到語法錯誤。 這是查詢:
SELECT
i.IncidentID,
i.AccountID,
i.IncidentTypeID,
i.IncidentStateID,
i.CreateDate,
i.LastModifyDate,
i.LastModifyUser,
(
SELECT
COUNT(*)
FROM
Actions a
WHERE
a.IncidentID = i.IncidentID
) AS ActionCount
CROSS APPLY
(
SELECT TOP 1
a.IncidentStateID,
a.LastModifyDate
FROM Actions a
WHERE a.IncidentID = i.IncidentID
ORDER BY a.LastModifyDate DESC
)
FROM
Incidents i
WHERE i.IncidentTypeID = 44
AND i.IncidentStateID = 7
AND i.CreateDate >= ?
AND i.CreateDate < ?
最終,我需要獲取發生事件的最新“動作”的a.IncidentStateID
和a.LastModifyDate。 這就是為什么它是由DESC排序並僅選擇頂部1的原因。任何人都可以看到語法問題。 該錯誤僅表示General error: 20018 Incorrect syntax near the keyword 'ORDER'.
。 如果我刪除它,它將繼續使用另一種語法,依此類推。
Apply
應該放在from
子句之后:
SELECT i.IncidentID, i.AccountID, i.IncidentTypeID,
t.IncidentStateID, i.CreateDate, i.LastModifyDate, t.LastModifyUser,
(SELECT COUNT(*)
FROM Actions a
WHERE a.IncidentID = i.IncidentID
) AS ActionCount
FROM Incidents i CROSS APPLY(
SELECT TOP (1) a.IncidentStateID, a.LastModifyDate
FROM Actions a
WHERE a.IncidentID = i.IncidentID
ORDER BY a.LastModifyDate DESC
) t
WHERE i.IncidentTypeID = 44 AND i.IncidentStateID = 7 AND
i.CreateDate >= ? AND i.CreateDate < ?;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.