Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Накопительная сумма (Серж) 21/10/2014 - 05:58:41
      Re: Накопительная сумма (Серж) 21/10/2014 - 06:10:55
      Re: Накопительная сумма (Akina) 21/10/2014 - 09:09:19

> Original message text:
> From: Серж - 21/10/2014 - 05:58:41
> Subject:Накопительная сумма
> -----------------
> Есть таблица вида:
> create table Invest(
> Id integer not null auto_increment,
> Investor integer not null default 0,
> Data Date not null,
> Delta Dec(11, 2) not null,
> primary key(Id));
>
> Требуется запрос, возвращающий суммы по полю Delta, накопленные Investor за период времени от начала до заданной даты. При этом отрицательные Delta должны учитываться только на следующий день.
>
> Пытался делать так:
>
> select A.Data, B.Investor, sum(C.Delta)
> from Invest A
> left join Invest B on true
> left join Invest C on C.Investor = B.Investor and(C.Data < A.Data or(C.Data = A.Data and C.Delta > 0))
> group by A.Data, B.Investor;
>
> Столбцы Data и Investor получаются правильно. В столбце Delta значения NULL расположены верно, а вот сами суммы как минимум удвоены :((
>
> Где я ошибаюсь?
>
>
>


From: Серж - 21/10/2014 - 06:10:55
Subject:Накопительная сумма
-----------------
Для иллюстрации вот данные в таблице:

+----+----------+--------+------------+
| Id | Investor | Delta | Data |
+----+----------+--------+------------+
| 1 | 1 | 100.00 | 2014-10-10 |
| 4 | 0 | -20.00 | 2014-10-11 |
| 2 | 2 | 200.00 | 2014-10-12 |
| 6 | 1 | -80.00 | 2014-10-12 |
| 5 | 0 | 50.00 | 2014-10-13 |
| 3 | 3 | 150.00 | 2014-10-14 |
+----+----------+--------+------------+

А вот результат запроса:

mysql> select A.Data, B.Investor, sum(C.Delta)
-> from Invest A
-> left join Invest B on true
-> left join Invest C on C.Investor = B.Investor and(C.Data < A.Data or
-> (C.Data = A.Data and C.Delta > 0))
-> group by A.Data, B.Investor;
+------------+----------+--------------+
| Data | Investor | sum(C.Delta) |
+------------+----------+--------------+
| 2014-10-10 | 0 | NULL |
| 2014-10-10 | 1 | 200.00 |
| 2014-10-10 | 2 | NULL |
| 2014-10-10 | 3 | NULL |
| 2014-10-11 | 0 | NULL |
| 2014-10-11 | 1 | 200.00 |
| 2014-10-11 | 2 | NULL |
| 2014-10-11 | 3 | NULL |
| 2014-10-12 | 0 | -80.00 |
| 2014-10-12 | 1 | 400.00 |
| 2014-10-12 | 2 | 400.00 |
| 2014-10-12 | 3 | NULL |
| 2014-10-13 | 0 | 60.00 |
| 2014-10-13 | 1 | 40.00 |
| 2014-10-13 | 2 | 200.00 |
| 2014-10-13 | 3 | NULL |
| 2014-10-14 | 0 | 60.00 |
| 2014-10-14 | 1 | 40.00 |
| 2014-10-14 | 2 | 200.00 |
| 2014-10-14 | 3 | 150.00 |
+------------+----------+--------------+


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
43254



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |