The CREATE TABLE ` tet ` (
` id ` int (10) not NULL AUTO_INCREMENT,
` name ` varchar (40) COLLATE utf8mb4_bin not NULL default ',
Table_size decimal (15, 2) NOT NULL DEFAULT '0.00',
` create_time ` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (` id `),
The KEY ` idx_create_time ` (` create_time `)
) ENGINE=InnoDB AUTO_INCREMENT=0;
Mysql> Select * from tet order by create_time;
+ - + -- -- -- -- -- -- -- -- -- -- -- - + -- -- -- -- -- -- -- -- -- -- -- - + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - +
| | id name | table_size | create_time |
+ - + -- -- -- -- -- -- -- -- -- -- -- - + -- -- -- -- -- -- -- -- -- -- -- - + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - +
34.00 | | 1 | order_item | 2019-03-01 13:00:04 |
60.00 | | 3 | order_item | 2019-03-15 13:00:04 |
54.00 | | 2 | order_item | 2019-03-30 13:00:04 |
+ - + -- -- -- -- -- -- -- -- -- -- -- - + -- -- -- -- -- -- -- -- -- -- -- - + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - +
Want to change to:
Name the 2019-03-01 13:00:04 2019-03-01 13:00:04 13:00:04 2019-03-30
Order_item 34.00 60.00 54.00
To ask how to write SQL?
CodePudding user response:
The SELECT t.n ame, MAX (IF (r=1, t.t able_size, NULL)), MAX (IF (r=2, t.t able_size, NULL)), MAX (IF (r=3, t.t able_size, NULL)) FROM (
SELECT t. *, @ : R=@ R + R FROM 1 (
SELECT t. *, @ R:=0 FROM tet t ORDER BY DATE_FORMAT (tc reate_time, '% % Y - m - H: % d % % s: % I ")
) t) t GROUP BY t.n ame
CodePudding user response:
reference 1st floor AHUA1001 response: SELECT t.n ame, MAX (IF (r=1, t.t able_size, NULL)), MAX (IF (r=2, t.t able_size, NULL)), MAX (IF (r=3, t.t able_size, NULL)) FROM ( SELECT t. *, @ : R=@ R + R FROM 1 ( SELECT t. *, @ R:=0 FROM tet t ORDER BY DATE_FORMAT (tc reate_time, '% % Y - m - H: % d % % s: % I ") ) t) t GROUP BY t.n ame -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Thank you very much, insert after three other data problems Insert into tet (name, table_size, create_time) values (' cust_list, 10.00, 'the 2019-03-15 13:00:04'); Insert into tet (name, table_size, create_time) values (' cust_list, 5.00, 'the 2019-03-01 13:00:04'); Insert into tet (name, table_size, create_time) values (' cust_list, 30.00, 'the 2019-03-30 13:00:04'); Mysql> SELECT t.n ame, MAX (IF (r=1, t.t able_size, NULL)), MAX (IF (r=2, t.t able_size, NULL)), MAX (IF (r=3, t.t able_size, NULL)) FROM (SELECT t. *, @ r:=@ r + r FROM 1 (SELECT t. *, @ r:=0 FROM tet t ORDER BY DATE_FORMAT (tc reate_time, '% % Y - m - H: % d % % s: % I ")) t) t GROUP BY t.n ame. + -- -- -- -- -- -- -- -- -- -- -- - + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + | name | MAX (IF (r=1, t.t able_size, NULL)) | MAX (IF (r=2, t.t able_size, NULL)) | MAX (IF (r=3, t.t able_size, NULL)) | + -- -- -- -- -- -- -- -- -- -- -- - + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + 5.00 | | cust_list | NULL | NULL | | order_item | | NULL | | 60.00 34.00 + -- -- -- -- -- -- -- -- -- -- -- - + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + CodePudding user response:
Since this not line, that is the simple and crude, The SELECT t.n ame, (SELECT tt. Table_size FROM tet WHERE tt tt. Name=t.n ame ORDER BY tt, create_time LIMIT 1) table_size_1, (SELECT tt. Table_size FROM tet WHERE tt tt. Name=t.n ame ORDER BY tt, create_time LIMIT 1, 1) table_size_2, (SELECT tt. Table_size FROM tet WHERE tt tt. Name=t.n ame ORDER BY tt, create_time LIMIT 2, 1) table_size_3 The FROM tet t GROUP BY t.n ame;