mysql says У меня есть синтаксическая ошибка для этого кода. Может ли кто-нибудь сказать мне, где это?
На первый взгляд ваш код выглядит хорошо.
* Я также хочу использовать date_format на uploaddate, как я могу это сделать без завинчивания функцию Concat? *
Вы, скорее всего, имел в виду использовать SUM()
вместо MAX()
если может быть несколько строк за uploadedby
за день.
Вот как ваш код с DATE_FORMAT()
может выглядеть
SET @sql = NULL;
SELECT GROUP_CONCAT(DISTINCT
CONCAT('SUM(CASE WHEN DATE(uploaddate) = ''', DATE(uploaddate),
''' THEN points END) `', DATE_FORMAT(uploaddate, '%m/%d/%Y'), '`'))
INTO @sql
FROM imsexport;
SET @sql = CONCAT('SELECT uploadedby, ', @sql, '
FROM imsexport
GROUP BY uploadedby');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
Выход:
| UPLOADEDBY | 01/01/2013 | 01/02/2013 | 01/03/2013 | 01/04/2013 |
|------------|------------|------------|------------|------------|
| Bob | 1 | 2 | 1 | 3 |
| Sue | 4 | 2 | (null) | 2 |
Вот SQLFiddle демо
Вот как это будет выглядеть выполняется с использованием mys QL консоль
mysql> SET @sql = NULL;
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql> SELECT GROUP_CONCAT(DISTINCT
-> CONCAT('SUM(CASE WHEN DATE(uploaddate) = ''', DATE(uploaddate),
-> ''' THEN points END) `', DATE_FORMAT(uploaddate, '%m/%d/%Y'), '`'))
-> INTO @sql
-> FROM imsexport;
Query OK, 1 row affected (0.00 sec)
mysql>
mysql> SET @sql = CONCAT('SELECT uploadedby, ', @sql, '
'> FROM imsexport
'> GROUP BY uploadedby');
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql> PREPARE stmt FROM @sql;
Query OK, 0 rows affected (0.00 sec)
Statement prepared
mysql> EXECUTE stmt;
+------------+------------+------------+------------+------------+
| uploadedby | 01/01/2013 | 01/02/2013 | 01/03/2013 | 01/04/2013 |
+------------+------------+------------+------------+------------+
| Bob | 1 | 2 | 1 | 3 |
| Sue | 4 | 2 | NULL | 2 |
+------------+------------+------------+------------+------------+
2 rows in set (0.01 sec)
mysql> DEALLOCATE PREPARE stmt;
Query OK, 0 rows affected (0.00 sec)
Сообщение точное сообщение об ошибке и точная схема таблицы 'SHOW CREATE TABLE imsexport;' тип – peterm
Какие данные 'uploaddate' имеет (дата, DateTime, метки времени, INT)? У вас всегда есть одна строка для 'uploaded' на' uploaddate'? – peterm
CREATE TABLE imsexport \t ('id' int,' uploadedby' varchar (255), 'uploaddate' varchar (255),' points' int (11)) ; \t INSERT INTO imsexport \t ('id',' uploadedby', 'uploaddate',' points') ЗНАЧЕНИЯ \t (1, 'Боб', '2013-01-01 12:30:00', ' 1 '), \t (2,' Bob ',' 2013-01-02 06:05:00 ',' 2 '), \t (3,' Bob ',' 2013-01-03 14:25: 00 ',' 1 '), \t (4,' Bob ',' 2013-01-04 15:30:00 ',' 3 '), \t (5,' Sue ',' 2013-01-01 00:00:00 ',' 1 '), \t (6,' Sue ',' 2013-01-01 00:45:00 ',' 3 '), \t (7,' Sue ',' 2013 -01-02 16:20:00 ',' 2 '), \t (8, 'Sue', '2013-01-04 17:10:00', '2') ; – rain