1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
| --------------
SET AUTOCOMMIT = 0
--------------
--------------
START TRANSACTION
--------------
--------------
DROP DATABASE IF EXISTS `base`
--------------
--------------
CREATE DATABASE `base`
DEFAULT CHARACTER SET `latin1`
DEFAULT COLLATE `latin1_general_ci`
--------------
--------------
DROP TABLE IF EXISTS `test`
--------------
--------------
CREATE TABLE IF NOT EXISTS `test`
(
`id` integer unsigned NOT NULL AUTO_INCREMENT,
`date` date NOT NULL,
`type` char(03) NOT NULL,
`depot` tinyint NOT NULL,
`groupe` integer unsigned NULL,
PRIMARY KEY (`Id`),
INDEX `idx` (`date`,`type`,`depot`)
) ENGINE=InnoDB
DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
ROW_FORMAT=COMPRESSED
--------------
--------------
DROP TRIGGER IF EXISTS `groupe`
--------------
--------------
CREATE TRIGGER `groupe`
BEFORE INSERT ON `test`
FOR EACH ROW BEGIN
SET NEW.groupe=ifnull((select groupe from test where date=new.date and type=new.type and depot=new.depot),ifnull((select max(groupe)+1 from test),1));
END
--------------
--------------
insert into `test` (`date`,`type`,`depot`) values
('2015-11-01', 'In', 1),
('2015-11-02', 'In', 1),
('2015-11-01', 'Out', 1),
('2015-11-02', 'Out', 2),
('2015-11-01', 'In', 1)
--------------
--------------
select * from test order by date, type, depot
--------------
+----+------------+------+-------+--------+
| id | date | type | depot | groupe |
+----+------------+------+-------+--------+
| 1 | 2015-11-01 | In | 1 | 1 |
| 5 | 2015-11-01 | In | 1 | 1 |
| 3 | 2015-11-01 | Out | 1 | 3 |
| 2 | 2015-11-02 | In | 1 | 2 |
| 4 | 2015-11-02 | Out | 2 | 4 |
+----+------------+------+-------+--------+
--------------
COMMIT
--------------
--------------
SET AUTOCOMMIT = 1
--------------
Appuyez sur une touche pour continuer... |
Partager