【发布时间】:2011-08-12 20:12:34
【问题描述】:
我有一份 Remedy 票证转储,其中包括提交日期和解决日期。我需要做的是计算每个提交了至少一张票的日期:
- $date 提交的工单数量
- $date 解决的票数
- $date 开始营业时仍然开放的门票数量
我有一个查询可以获取项目 1 和 2,但我被困在 3 上。我基本上需要一种方法来查看子查询中的 $date 1 和 2 并将其用作我的 WHERE 子句3 的子查询。
这是我的查询:
SELECT xDate, sTot, cTot, oTot FROM
(
(
(
SELECT xDate, COUNT(*) AS sTot
FROM (
SELECT FORMAT(SubmitDate, "mm/dd/yyyy") AS xDate FROM tblOpenINC
UNION ALL
SELECT FORMAT(SubmitDate, "mm/dd/yyyy") AS xDate FROM tblClosedINC
) GROUP BY xDate
) AS sub
INNER JOIN
(
SELECT FORMAT(LastResolvedDate, "mm/dd/yyyy") AS yDate, COUNT(*) AS cTot
FROM tblClosedINC
GROUP BY FORMAT(LastResolvedDate, "mm/dd/yyyy")
) AS res
ON res.yDate = sub.xDate
)
INNER JOIN
(
SELECT FORMAT(SubmitDate, "mm/dd/yyyy") AS zDate, COUNT(*) AS oTot
FROM tblClosedINC
WHERE FORMAT(SubmitDate, "mm/dd/yyyy") < DateValue(xDate)
GROUP BY FORMAT(SubmitDate, "mm/dd/yyyy")
) AS opn
ON opn.zDate = sub.xDate
)
ORDER BY DateValue(xDate) ASC
最后一个子查询不起作用,因为它不知道 xDate(第一个子查询的日期)是什么。
如果我必须使用 VBA 执行此操作,我会这样做,但我真的希望能够使用 SQL 执行所有这些操作,以便可以轻松地将原始数据转储到 Excel 等。
另外,为了澄清:当我从 Remedy 获得转储时,我有单独的表用于当前打开或当前处于非打开状态的票证,因此第一个子查询中的 UNION。此外,Remedy 的所有日期字段都有时间戳,因此 FORMAT 函数会去掉时间戳。
【问题讨论】: