我有一张Remedy门票,包括提交的日期和解决的日期。我需要做的是计算至少提交一张票的每个日期:
我有一个查询可以获得第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功能会删除时间戳。
答案 0 :(得分:0)
尝试将子查询移到顶部。也许这会有所帮助。
SELECT xDate, sTot, cTot,
(SELECT FORMAT(SubmitDate, "mm/dd/yyyy") FROM tblClosedINC WHERE FORMAT(SubmitDate, "mm/dd/yyyy") < DateValue(xDate) GROUP BY FORMAT(SubmitDate, "mm/dd/yyyy")) as zDate,
(SELECT COUNT(*) FROM tblClosedINC WHERE FORMAT(SubmitDate, "mm/dd/yyyy") < DateValue(xDate)GROUP BY FORMAT(SubmitDate, "mm/dd/yyyy")) as 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
)
)
ORDER BY DateValue(xDate) ASC