sql для расчета ежедневных итогов мин. итоги предыдущего дня - PullRequest
1 голос
/ 07 февраля 2010

У меня есть таблица с датой, товаром и количеством.

Мне нужен SQL-запрос для возврата итогов за день, но итог - это количество минус итоги предыдущего дня. Количество накапливается в течение месяца. Таким образом, у первого может быть 5, у второго - 12, а у третьего - 20.

Итак, 1-й добавляет 5 2-й добавляет 7, чтобы сделать 12 3-е добавляет 8, чтобы сделать 20.

Я делал что-то подобное в прошлом, но не могу найти или вспомнить. Я знаю, что мне понадобится коррелированный подзапрос.

ТИА

-

Редактировать 1

Я использую Microsoft Access. Дата - это поле даты и времени, элемент является текстом, и количество есть число

-

Редактировать 2

Хорошо, это то, что у меня есть

SELECT oos.report_date, oos.tech, oos.total_cpe, oos_2.total_cpe
   FROM oos INNER JOIN (
     SELECT oos_2.tech, Sum(oos_2.total_cpe) AS total_cpe
     FROM oos_2
     WHERE (((oos_2.report_date)<#10/10/2010#))
     GROUP BY oos_2.tech
   ) oos_2 ON oos.tech = oos_2.tech;

Как мне получить oos.report_date, где я говорю # 10/10/2010 #. Я думал, что могу просто воткнуть это туда, как mysql, но не повезло. Я собираюсь продолжить исследования.

Ответы [ 2 ]

0 голосов
/ 07 февраля 2010

Хорошо, я понял это.

SELECT o.report_date, o.tech, o.total_cpe, 
o.total_cpe -  (
    SELECT  IIf(Sum(oos.total_cpe) is null, 0,Sum(oos.total_cpe)) AS total_cpe 
    FROM oos 
    WHERE (((oos.tech)=o.tech) AND ((oos.report_date)<o.report_date))
) AS total
FROM oos o;
0 голосов
/ 07 февраля 2010

Суммируйте их, добавив единицу к дате и сделав значение отрицательным, таким образом, взяв вчерашнюю сумму от сегодняшней:

SELECT report_date, tech, Sum(total_cpe) AS total_cpe 
FROM (
    SELECT oos.report_date, oos.tech, oos.total_cpe
    FROM oos 
    UNION ALL
    SELECT oos.report_date+1, oos.tech, 0-oos.total_cpe 
    FROM oos 
)
WHERE (report_date < #10/10/2010#) 
GROUP BY report_date, tech 
ORDER BY report_date, tech 
...