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; | |
| Интернет-форум Краснодарского края и Краснодара |