Я пытаюсь выяснить, «сколько уникальных сообщений было отправлено человеку на определенной лодке в течение определенного периода времени и каковы минимальные дни между этими текстами» и отображать включая счетчик.Группа по идентификаторам и TIMESTAMPDIFF один столбец в одной таблице
Лицо представлено 'id', лодкой 'id2' и сообщением 'text'.
CREATE TABLE `stacktable` (
`timestamp` DATETIME NOT NULL,
`id` VARCHAR(15) NOT NULL,
`id2` VARCHAR(3) NULL DEFAULT NULL,
`text` VARCHAR(255) NULL DEFAULT NULL,
`id3` INT(10) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id3`)
);
insert into stacktable (timestamp,id,id2,text) VALUES
('2015-01-01 00:00:01',1,10,'ABC'),
('2015-01-01 00:00:01',2,11,'ABC'),
('2015-01-01 00:00:01',3,12,'ABC'),
('2015-01-01 00:00:02',3,12,'ABC'),
('2015-01-01 00:00:02',1,10,'ABC'),
('2015-01-04 00:00:01',1,10,'ABC'),
('2015-01-04 00:00:01',1,10,'BCD'),
('2015-01-04 00:00:01',2,11,'ABC'),
('2015-01-04 00:00:01',2,11,'BCD'),
('2015-01-04 00:00:01',3,12,'ABC'),
('2015-01-04 00:00:01',3,12,'BCD'),
('2015-01-04 00:00:01',3,13,'CDE'),
('2015-01-07 00:00:01',2,11,'BCD'),
('2015-01-07 00:00:01',3,12,'BCD'),
('2015-01-07 00:00:01',3,13,'CDE'),
('2015-01-07 00:00:01',3,13,'DEF'),
('2015-01-08 00:00:01',3,12,'ABC'),
('2015-01-08 00:00:01',4,14,'EFG'),
('2015-01-09 00:00:01',4,14,'EFG'),
('2015-01-09 00:00:02',4,15,'FGH'),
('2015-01-10 00:00:01',4,14,'EFG'),
('2015-01-10 00:00:01',4,14,'FGH'),
('2015-01-10 00:00:01',4,15,'FGH'),
('2015-01-11 00:00:01',4,14,'EFG'),
('2015-01-15 00:00:01',4,14,'EFG');
Чтобы показать, что я пытаюсь достичь:
select * from stacktable where id = 1
timestamp id id2 text id3
2015-01-01 00:00:01 1 10 ABC 1 First entry for id+id2+text (ABC)
2015-01-01 00:00:02 1 10 ABC 5 Second entry for same keys id+id2+text 1 second later
2015-01-04 00:00:01 1 10 ABC 6 Third entry for same keys id+id2+text 2 days later
2015-01-04 00:00:01 1 10 BCD 7 First entry for id+id2+text (BCD)
Я только хочу, чтобы подсчитать количество записей, что имеет «такой же идентификатор, ID2 и текст в течение 2-х дней», но и показать «минимальный интервал между днями».
Выход я хочу от этого был бы:
id id2 text count(*) mindiffdatebetweenhits
-------------------------------------------
1 10 ABC 3 0 count id3s 1,5 and 6, minimumdaydiff is between id3 1 and 5 = 0 days
3 12 ABC 3 0 count id3s 3,4 and 10, minimumdaydiff is between id3 3 and 4 = 0 days
4 14 EFG 4 1 count id3s 18,19,21 and 24, minimumdaydiff is equal between all hits = 1 day
4 15 FGH 2 0 count id3s 20 and 23, minimumdaydiff is between id3 20 and 23 = 0 days
Как я могу получить желаемый результат?
Вы уверены, что это будет ваш выход? Причина разницы между id3 = 6 и 1 составляет более 2 дней. –
Я хочу, чтобы он подсчитал 3 для id = 1 (id3 1,5,6). Это происходит потому, что id3 1 и id3 5 <= 2 дня и id3 5 и id3 6 <= 2. SELECT TIMESTAMPDIFF (день, '2015-01-01 00:00:02', '2015-01-04 00:00: 01 ') from dual = 2 - я хочу «проверить для тех, у кого одинаковый идентификатор, id2, текст в течение 2 дней с момента последнего попадания» –
записи 3 и 4 имеют дату 2015-01-01 и запись 10, 2015-01-04 , Итак, более двух дней. Но вы хотите считать 3 записи. Не похоже, что «в течение 2 дней с момента последнего попадания» – koriander