К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

Помогите построить (my)SQL-запрос для графика

Гость
0 - 11.09.2014 - 15:26
Есть вот такой набор данных (лог) с датами и именами:


Нужно выбрать число записей с каждым именем за каждую дату c группировкой по дате, чтобы потом на основании этих данных построить графики.


С одним именем проблемы нет, а как выбрать сразу всех — не пойму.

Данные будут преобразованы в JSON чтобы отдаваться в Google Charts API.



Гость
1 - 11.09.2014 - 16:25
Пока родил лишь такое:

SELECT
`date`,
`name`,
GROUP_CONCAT(DISTINCT `id` ORDER BY `date` ASC SEPARATOR ', ' ) AS 'vals'
FROM `table` GROUP BY `date` limit 30;

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

Но все же хотелось бы из БД получать готовую выборку.
Гость
2 - 14.09.2014 - 19:45
Сначала выбери все имена одним запросом, а потом строй второй запрос со всеми колонками.
Гость
3 - 14.09.2014 - 20:29
SELECT distinct таб.Имя FROM таб;
Гость
4 - 14.09.2014 - 20:29
SELECT таб.День, Sum(IIf([Имя]="петя",1,0)) AS петя, Sum(IIf([Имя]="вася",1,0)) AS вася, Sum(IIf([Имя]="коля",1,0)) AS коля
FROM таб
GROUP BY таб.День;
Гость
5 - 14.09.2014 - 20:30
в аксессе состряпал
Гость
6 - 14.09.2014 - 22:35
create table t1 (
Date date,
Name varchar(20)
);

insert into t1 values
( '2014-09-01', 'Vasy'),
( '2014-09-01', 'Pety'),
( '2014-09-01', 'Ivan'),
( '2014-09-01', 'Vasy'),
( '2014-10-01', 'Ivan'),
( '2014-10-01', 'Vasy');

SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'COUNT(IF(t.Name = ''',
Name,
''', t.Name, NULL)) AS ',
Name
)
) INTO @sql
FROM t1;

SET @sql = CONCAT('SELECT t.Date,', @sql, '
FROM t1 t
GROUP BY t.Date');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
Гость
7 - 14.09.2014 - 22:36
http://sqlfiddle.com/#!2/2cc5d/3
Гость
8 - 16.09.2014 - 12:18
7-40KHYTbIU > GODLIKE!!! Большое спасибо за помощь! Доброго здоровья вам и вашим близким!
Гость
9 - 18.09.2014 - 00:28
Ну, или мой вариант на этом языке:

select group_concat('sum(if(Name = ''', Name, ''', 1, 0)) AS ', Name) from (select distinct Name from t1) as t2 into @sql;



SET @sql = CONCAT('SELECT t.Date,', @sql, '
FROM t1 t
GROUP BY t.Date');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;


К списку вопросов






Copyright ©, Все права защищены