Вы получаете не совсем то, что хотели, но это точно
SELECT
`user`
,`type`
,dategone `No. of days`
FROM
(SELECT
`type`,
IF(@id = `user`,DATEDIFF(`timestamp` , @days), -1) dategone #
,@id := `user` `user`
,@days := `timestamp`
FROM
(SELECT
`D`, `user`, `type`, `timestamp`
From table1
ORDER BY `user` ASC, `timestamp` ASC) a
, (SELECT @days :=0) b, (SELECT @id :=0) c) d
WHERE dategone > -1;
CREATE TABLE table1 (
`D` INTEGER,
`user` INTEGER,
`type` INTEGER,
`timestamp` VARCHAR(19)
);
INSERT INTO table1
(`D`, `user`, `type`, `timestamp`)
VALUES
('1', '1', '1', '2019-02-08 15:00:00'),
('2', '1', '3', '2019-02-15 15:00:00'),
('3', '1', '2', '2019-03-06 15:00:00'),
('4', '2', '3', '2019-02-01 15:00:00'),
('5', '2', '1', '2019-02-06 15:00:00'),
('6', '3', '1', '2019-01-10 15:00:00'),
('7', '3', '4', '2019-02-08 15:00:00'),
('8', '3', '3', '2019-02-24 15:00:00'),
('9', '3', '2', '2019-03-04 15:00:00'),
('10', '3', '3', '2019-03-05 15:00:00');
✓
✓
SELECT
`user`
,`type`
,dategone `No. of days`
FROM
(SELECT
`type`,
IF(@id = `user`,DATEDIFF(`timestamp` , @days), -1) dategone #
,@id := `user` `user`
,@days := `timestamp`
FROM
(SELECT
`D`, `user`, `type`, `timestamp`
From table1
ORDER BY `user` ASC, `timestamp` ASC) a, (SELECT @days :=0) b, (SELECT @id :=0) c) d
WHERE dategone > -1;
user | type | No. of days
---: | ---: | ----------:
1 | 3 | 7
1 | 2 | 19
2 | 1 | 5
3 | 4 | 29
3 | 3 | 16
3 | 2 | 8
3 | 3 | 1
дБ <> скрипка здесь