【发布时间】:2015-09-06 19:15:08
【问题描述】:
首先,请原谅语言,我一直无法将我的问题解析为实际的英语,所以如果有人可以编辑以使其更清晰,那将有所帮助。
我已经为此苦苦挣扎了一段时间。我需要一个查询,对于每个组,从过去 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 */
【问题讨论】:
-
我在我的 groupwise max 博客中讨论了一个解决方案:(mysql.rjweb.org/doc.php/groupwise_max)。
标签: mysql sql mariadb heidisql