Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Ngày của bảng tổng hợp mysql (dữ liệu dọc sang ngang)

Để có được kết quả này, bạn sẽ muốn xoay dữ liệu. MySQL không có hàm pivot nhưng bạn có thể sử dụng hàm tổng hợp với CASE biểu thức.

Nếu số ngày đã biết, thì bạn có thể viết mã cố định cho truy vấn:

select client_id,
  max(case when rownum = 1 then date end) Date1,
  max(case when rownum = 2 then date end) Date2,
  max(case when rownum = 3 then date end) Date3
from
(
  select client_id,
    date,
    @row:=if(@prev=client_id, @row,0) + 1 as rownum,
    @prev:=client_id 
  from yourtable, (SELECT @row:=0, @prev:=null) r
  order by client_id, date
) s
group by client_id
order by client_id, date

Xem SQL Fiddle with Demo

Tôi đã triển khai các biến người dùng để chỉ định số hàng cho mỗi bản ghi trong client_id nhóm.

Nếu bạn có một số ngày không xác định, thì bạn sẽ cần sử dụng một câu lệnh đã chuẩn bị để tạo sql động:

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(CASE WHEN rownum = ',
      rownum,
      ' THEN date END) AS Date_',
      rownum
    )
  ) INTO @sql
from
(
  select client_id,
    date,
    @row:=if(@prev=client_id, @row,0) + 1 as rownum,
    @prev:=client_id 
  from yourtable, (SELECT @row:=0) r
  order by client_id, date
) s
order by client_id, date;


SET @sql 
  = CONCAT('SELECT client_id, ', @sql, ' 
           from
           (
             select client_id,
               date,
               @row:=if(@prev=client_id, @row,0) + 1 as rownum,
               @prev:=client_id 
             from yourtable, (SELECT @row:=0) r
             order by client_id, date
           ) s
           group by client_id
           order by client_id, date');

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

Xem SQL Fiddle with Demo .

Cả hai đều cho kết quả:

| CLIENT_ID |                          DATE_1 |                          DATE_2 |                     DATE_3 |
--------------------------------------------------------------------------------------------------------------
|         1 | February, 03 2013 00:00:00+0000 | February, 10 2013 00:00:00+0000 | May, 12 2013 00:00:00+0000 |
|         2 | February, 03 2013 00:00:00+0000 |     July, 15 2013 00:00:00+0000 |                     (null) |



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Các lệnh quản trị cơ sở dữ liệu cơ bản của MySQL - Phần I

  2. php mysql_connect Cảnh báo tắt

  3. MySQL - MariaDB - Viết thủ tục được lưu trữ đầu tiên

  4. Viết lại lựa chọn mysql để giảm thời gian và ghi tmp vào đĩa

  5. Docker Soạn kết nối ECONNREFUSED 172.18.0.4:3306