[英]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.