SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 30.03.2011 15:26:35

ehill
Участник
Зарегистрирован: 23.03.2011
Сообщений: 10

детализация с нарастающим итогом

Подскажите, пожалуйста.
В таблицу
detailing | CREATE TABLE `detailing` (
  `ls` int(6) unsigned NOT NULL,
  `number` varchar(10) NOT NULL DEFAULT '0',
  `data` date DEFAULT NULL,
  `diration_min` smallint(3) unsigned DEFAULT NULL,
  `cost_rub` float(6,2) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=cp1251 |
ежедневно происходит выгрузка данных с нарастающим итогом, т.е. за 01 число выгружается детализация звонков, за 02 число к детализации за первое число добавляются новые данные и добавляются в таблицу.
Возможно выполнить запрос, показывающий за каждый день реальную детализацию по каждому номеру??

Неактивен

 

#2 02.04.2011 14:56:34

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: детализация с нарастающим итогом

Честно говоря, не понял про нарастающий итог — Вы де добавляете строки
за правильную дату? Тогда можно группировать по ней:

SELECT * FROM detailing GROUP BY data, number;

Еще можете поиграть с GROUP BY ... WITH ROLLUP — может понадобиться smile

Неактивен

 

#3 03.04.2011 23:49:56

ehill
Участник
Зарегистрирован: 23.03.2011
Сообщений: 10

Re: детализация с нарастающим итогом

Возможно,  я плохо обрисовал ситуацию. Простите... Попробую еще раз. У меня в таблицу каждый день по каждому номеру выгружается длительность телефонных разговоров, причем к значению предыдущего числа прибавляется новое. Например, если я 1-го числа проговорил по телефону 2 минуты, то в детализации за 1-ое число будет 2 минуты. Второго числа я наговорил на 3 минуты и у меня в детализации за второе число отобразиться не 3 минуты, а 5. Мне необходимо выполнить запрос, который бы вычислял, сколько проговорил каждый номер.
Сейчас я за каждый день выгружаю данные в отдельную таблицу, а затем объединяю их:
select tb4.ls, tb4.number, tb4.diration_min - tb3.diration_min
from tb4 left join tb3
on tb4.number=tb3.number;
Не совсем удобно, но работает. Буду признателен, если подскажите, как все это сделать в одной таблице.

Неактивен

 

#4 04.04.2011 00:01:29

simple
Активист
Зарегистрирован: 25.11.2010
Сообщений: 168

Re: детализация с нарастающим итогом

SELECT SUM(время звонков) FROM detaling GROUP BY number

Неактивен

 

#5 04.04.2011 00:09:56

ehill
Участник
Зарегистрирован: 23.03.2011
Сообщений: 10

Re: детализация с нарастающим итогом

Тогда я получу сумму звонков по каждому номеру по всем датам, а мне необходимо разность длительностей по текущей и предыдущей дате по каждому номеру.

Неактивен

 

#6 08.04.2011 21:07:49

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: детализация с нарастающим итогом

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

SELECT @n := '';
SELECT duration_min - @a, data, IF(@n=number,@a:=duration_min,@a := 0) FROM detaling ORDER BY number, data;

Ах, да, и табличку Вы зря так назвали, раз у Вас там хранится по строке на дату.
Детализация — это по строке на звонок.

Неактивен

 

#7 13.04.2011 13:08:09

ehill
Участник
Зарегистрирован: 23.03.2011
Сообщений: 10

Re: детализация с нарастающим итогом

Вы правы, но у меня нет возможности хранить данные по человечески, по крайней мере сейчас.
Я набросал запрос:
SET @f:='2011-04-11';
SELECT detailing.ls, detailing.number, detailing.data,
detailing.diration_min - detailing_new.diration_min AS 'Длительность'
FROM detailing INNER JOIN (SELECT number,
diration_min  FROM detailing
WHERE data = (SELECT @f - INTERVAL 1 DAY)) AS detailing_new
ON detailing.number = detailing_new.number
WHERE data = @f;
Вроде бы рабочий. Подскажите, пожалуйста, этот запрос имеет право на жизнь, или можно сделать на много проще.

И по поводу таблички. Я ее переименую на statistics. Думаю будет правельнее.

Неактивен

 

#8 15.04.2011 20:57:40

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: детализация с нарастающим итогом

Если работает — значит, имеет smile

Я бы только подзапросы убрал там, где они не нужны. Например,
WHERE data = @f - INTERVAL 1 DAY сможет использовать индекс.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson