SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 03.04.2015 16:52:47

mr. U.W.
Участник
Зарегистрирован: 20.02.2008
Сообщений: 3

Помогите составить запрос с нарастающим итогом

таблица авторизаций пользователей

CREATE TABLE `user_entrances` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `user_id` int(10) unsigned NOT NULL,
  `created_at` datetime NOT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  KEY `user_id` (`user_id`) USING BTREE,
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 AVG_ROW_LENGTH=220;

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

пример необходимого вывода:
`date`        `user_id`      `logins`
2015-03-01         16         6
2015-03-02         16         8
2015-03-03         95         11
2015-03-03         16         10
2015-03-04         16         11
2015-03-05         95         12
2015-03-12         95         13
2015-03-12         16         12
2015-03-17         95         14
2015-03-21         16         13
2015-03-23         16         15
2015-03-24         16         16
2015-03-30         16         17
2015-03-31         95         17
2015-03-31         16         21
2015-04-01         16         23
2015-04-02         95         18
2015-04-02         16         24
2015-04-03         95         20
2015-04-03         16         25

Неактивен

 

#2 03.04.2015 16:56:49

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Помогите составить запрос с нарастающим итогом

Попробуйте
SELECT DATE(`created_at`), user_id,count(*)  FROM `user_entrances` GROUP BY DATE(`created_at`), user_id;


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 06.04.2015 10:02:53

mr. U.W.
Участник
Зарегистрирован: 20.02.2008
Сообщений: 3

Re: Помогите составить запрос с нарастающим итогом

deadka написал:

Попробуйте
SELECT DATE(`created_at`), user_id,count(*)  FROM `user_entrances` GROUP BY DATE(`created_at`), user_id;

Не совсем то что нужно. ваш запрос считает количество входов каждого пользователя по дням. Мне же необходима сумма с нарастающим итогом. Т.е. 1ый день - `x` входов, 2ой день - 1ый день +  `y` входов, 3ий день - 1ый день + 2ой день + `z` входов.
Вот этим запросом я получаю то что мне нужно, но только для 1 пользователя. А вот как мне добиться того же результата, но для каждого, я не знаю sad

select `ue`.`date`, `ue`.`user_id`, @i := `logins` + @i as `total`
 from (select date(`created_at`) as `date`, `user_id`, count(`created_at`) as `logins`
        from `user_entrances`
         where `user_id` = 95
          group by `date`,`user_id`) as `ue`
 join (select @i := 0) `var`

Неактивен

 

#4 06.04.2015 11:29:09

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Помогите составить запрос с нарастающим итогом

Посмотрите http://sqlinfo.ru/forum/viewtopic.php?id=1742 только до самого конца, чтобы не повторять ошибок изложенных в её начале.
Можно обойти таблицу в порядке ORDER BY `user_id`, `created_at` считая кол-во входов нарастающим итогом для каждого пользователя и сбрасывая счетчик при переходе на новый `user_id`.

Неактивен

 

Board footer

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