根据属性按降序进行分组,但按升序排序的最佳方式是什么?Sqlite:选择,根据一个属性desc分组。并根据另一个排序
CREATE TABLE IF NOT EXISTS
logs (id INTEGER NOT NULL,
prompt INTEGER NOT NULL,
value TEXT,
PRIMARY KEY (id));
INSERT INTO logs(id, prompt, value) VALUES(1, 10, "a");
INSERT INTO logs(id, prompt, value) VALUES(2, 4, "a");
INSERT INTO logs(id, prompt, value) VALUES(3, 10, "b");
INSERT INTO logs(id, prompt, value) VALUES(4, 6, "c");
INSERT INTO logs(id, prompt, value) VALUES(5, 5, "c");
INSERT INTO logs(id, prompt, value) VALUES(6, 4, "d");
INSERT INTO logs(id, prompt, value) VALUES(7, 4, "e");
INSERT INTO logs(id, prompt, value) VALUES(8, 10, "a");
INSERT INTO logs(id, prompt, value) VALUES(9, 10, "z");
现在,我想是要的请求:根据提示(只有一个每个不同的提示行)
组
只保留值与最大行ID
按升序排序ID(我不需要保留)
所以在这里我需要
prompt | value
10 | "z"
4 | "e"
6 | "c"
5 | "c"
这怎么可能?以及如何使它不太低效?你可以避免一个中间请求(即从select中选择 - 我觉得可能是这样做的方式,但不知道如何)。
UPDATE:最好我能想出是做一个中间查询,并使用MIN操作:
SELECT MIN(id), prompt, lvalue
FROM logs
INNER JOIN
(SELECT prompt as lprompt, value as lvalue
FROM logs
GROUP BY prompt ORDER BY id DESC)
ON
prompt = lprompt
GROUP BY prompt ORDER BY id ASC;
它的工作原理,但我不禁觉得这是一个坏的解决方案。
更新2:我想澄清,我想这会出现一个提示第一 ID,并与它出现在最后值;然后按照第一个ID的升序进行整个排序。
id |prompt | value
1 | 10 | "z"
2 | 4 | "e"
4 | 6 | "c"
5 | 5 | "c"
我希望更好的东西,这就是为什么我问的问题摆在首位。 –