Прежде всего, пожалуйста, извините за язык, у меня возникли проблемы с разбором моей проблемы на английском, поэтому, если кто-нибудь может отредактировать, чтобы сделать ее более ясной, что поможет.Получить последние [n, n + t] дней за группу
Я некоторое время боролся с этим. Мне нужен запрос, который по каждой группе из последних N дней пропускает самую последнюю и получает следующие T дней. Это версия классической проблемы «LIMIT with GROUP», и на самом деле один из запросов, которые я пробовал, который не работал, использовал эту форму.
MRE следующим образом:
CREATE TABLE `trying` (id INTEGER PRIMARY KEY AUTO_INCREMENT, types1 TEXT, stuffs INTEGER, dates DATE);
INSERT INTO `trying`(types1, stuffs, dates) VALUES("one",123,'2015-09-06');
INSERT INTO `trying`(types1, stuffs, dates) VALUES("one",67,'2015-09-05');
INSERT INTO `trying`(types1, stuffs, dates) VALUES("one",45,'2015-09-04');
INSERT INTO `trying`(types1, stuffs, dates) VALUES("one",98,'2015-09-03');
INSERT INTO `trying`(types1, stuffs, dates) VALUES("one",89,'2015-09-02');
INSERT INTO `trying`(types1, stuffs, dates) VALUES("two",56,'2015-09-02');
INSERT INTO `trying`(types1, stuffs, dates) VALUES("two",34,'2015-09-01');
INSERT INTO `trying`(types1, stuffs, dates) VALUES("two",98,'2015-08-31');
INSERT INTO `trying`(types1, stuffs, dates) VALUES("two",34,'2015-08-30');
INSERT INTO `trying`(types1, stuffs, dates) VALUES("two",12,'2015-08-29');
INSERT INTO `trying`(types1, stuffs, dates) VALUES("three",3,'2015-09-06');
INSERT INTO `trying`(types1, stuffs, dates) VALUES("three",8,'2015-09-04');
INSERT INTO `trying`(types1, stuffs, dates) VALUES("three",80,'2015-09-02');
INSERT INTO `trying`(types1, stuffs, dates) VALUES("three",9,'2015-09-01');
INSERT INTO `trying`(types1, stuffs, dates) VALUES("three",6,'2015-08-31');
В таблице trying
есть три types1
'типа': 'один', 'два' и 'три', и есть 5 наблюдений в каждой группе. Обратите внимание, что даты не совпадают между группами, и между ними могут быть пробелы (so no dates BETWEEN, like in this question).
В этом примере я хотел бы получить таблицу с тремя средними значениями для каждой группы. Так пропустить первое и последнее значение, ожидаемый результат будет выглядеть следующим образом:
types1 stuffs dates
one 67 2015-09-05
one 45 2015-09-04
one 98 2015-09-03
two 34 2015-09-01
two 98 2015-08-31
two 34 2015-08-30
three 8 2015-09-04
three 80 2015-09-02
three 9 2015-09-01
Несколько запросов, которые не работают:
SELECT types1, stuffs, dates FROM trying GROUP BY types1 LIMIT 2,4;
/*this returned the following */
types1 stuffs dates
two 56 2015-09-02
SELECT trying.* FROM (SELECT types1, stuffs, dates FROM trying) GROUP BY trying.types1 OFFSET 2,4;
/*threw out an error: Every derived table must have its own alias */
Я обсудить решение в м y groupwise max blog: (mysql.rjweb.org/doc.php/groupwise_max). –