Доступ к подзапросу SQL - количество записей до каждой даты в наборе результатов? - PullRequest
0 голосов
/ 13 августа 2011

У меня есть свалка билетов Remedy, которая включает отправленную дату и решенную дату. Что мне нужно сделать, так это рассчитать для каждой даты, на которую отправлен хотя бы один билет:

  1. Количество билетов, представленных на $ date
  2. Количество разрешенных билетов на дату $
  3. Количество билетов все еще открыто в начале бизнеса на $ 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 удаляет временную метку.

1 Ответ

0 голосов
/ 13 августа 2011

Попробуйте переместить подзапрос вверх. Может быть, это поможет.

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
...