访问SQL子查询 - 计算结果集中每个日期之前的记录?

时间:2011-08-12 20:12:35

标签: sql ms-access jet

我有一张Remedy门票,包括提交的日期和解决的日期。我需要做的是计算至少提交一张票的每个日期:

  1. $ date
  2. 上提交的门票数量
  3. 在$ date
  4. 上解决的门票数量
  5. $ date
  6. 开始营业时仍然打开的门票数量

    我有一个查询可以获得第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功能会删除时间戳。

1 个答案:

答案 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
相关问题