Mysql
 sql >> база данни >  >> RDS >> Mysql

дата на централна таблица на mysql (вертикални към хоризонтални данни)

За да получите този резултат, ще искате да завъртите информацията. MySQL няма централна функция, но можете да използвате агрегатна функция с CASE израз.

Ако броят на датите е известен, тогава можете да кодирате заявката:

изберете client_id, max(случай, когато rownum =1, след това край на датата) Date1, max(случай, когато rownum =2, след това край на датата) Date2, max(случай, когато rownum =3, след това край на датата) Date3from( изберете client_id , дата, @row:=if(@prev=client_id, @row,0) + 1 като rownum, @prev:=client_id от вашата таблица, (SELECT @row:=0, @prev:=null) r подреждане по client_id , дата) група по client_idorder по client_id, date 

Вижте SQL Fiddle с демонстрация

Внедрих потребителски променливи, за да присвоя номер на ред на всеки запис в client_id група.

Ако имате неизвестен брой дати, тогава ще трябва да използвате подготвено изявление, за да създадете sql динамично:

SET @sql =NULL;SELECT GROUP_CONCAT(DISTINCT CONCAT( 'МАКС.(CASE WHEN rownum =', rownum, ' THEN date END) AS Date_', rownum ) ) INTO @sqlfrom( изберете client_id, date, @row:=if(@prev=client_id, @row,0) + 1 като rownum, @prev:=client_id от вашата таблица, (SELECT @row:=0) r поръчка по client_id, дата) подреждане по client_id, дата; SET @sql =CONCAT('ИЗБЕРЕТЕ client_id, ', @sql, ' от ( изберете client_id, дата, @row:=if(@prev=client_id, @row,0) + 1 като rownum, @prev:=client_id от yourtable, (SELECT @row:=0) r поръчка по client_id, date ) s група по client_id поръчка по client_id, date');ПРИГОТОВЯТЕ stmt ОТ @sql;ИЗПЪЛНЯВАНЕ stmt;ПРЕКРАТЕ ПОДГОТОВКА stmt; 

Вижте SQL Fiddle с демонстрация .

И двете дават резултат:

<предварителен код>| CLIENT_ID | ДАТА_1 | ДАТА_2 | ДАТА_3 |------------------------------------------------ -------------------------------------------------- ------------| 1 | 03 февруари 2013 г. 00:00:00+0000 | 10 февруари 2013 г. 00:00:00+0000 | 12 май 2013 г. 00:00:00+0000 || 2 | 03 февруари 2013 г. 00:00:00+0000 | 15 юли 2013 г. 00:00:00+0000 | (нула) |


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Flask-SQLAlchemy - в движение връзки към множество бази данни

  2. Вземете ред с най-висока или най-ниска стойност от GROUP BY

  3. Най-лесният начин за копиране на MySQL база данни?

  4. Разлика между sql изрази и клауза

  5. Как да възстановите MySQL база данни от физически файлове