2 回答

TA貢獻1818條經驗 獲得超11個贊
給字段加索引,你現在給的測試表是沒索引的,所以會全表檢索.這個是最快捷的方法.
借用外部函數,現DISTINCT(Type),然后再到數據庫中根據每個類型的Type,獲取MAX(Id)的值,這種情況下會增大與數據庫的交互次數,但是對數據庫的壓力較小.這種方式同樣使用索引.
利用好索引很關鍵.且查詢語句盡量縮小查詢數據的范圍

TA貢獻1828條經驗 獲得超4個贊
CREATE TABLE test
(
str VARCHAR(1),
time DATETIME
);
INSERT INTO ywtg.test (str, time) VALUES ('a', '2016-08-03 16:41:37');
INSERT INTO ywtg.test (str, time) VALUES ('b', '2016-08-10 23:42:26');
INSERT INTO ywtg.test (str, time) VALUES ('a', '2016-08-13 23:42:46');
INSERT INTO ywtg.test (str, time) VALUES ('b', '2016-08-14 23:42:58');
INSERT INTO ywtg.test (str, time) VALUES ('b', '2016-08-15 23:43:13');
如上是表結構和數據,**需求:組與組之間按時間從大到小排序,組內數據按從小到大排序.**
如上數據也就是b組在a組前,b組和a組 組內數據又按從小到大排序,實現sql如下:
SELECT tt.*
FROM test tt LEFT JOIN (
SELECT
@rownum := @rownum + 1 AS rownum,
test.str
FROM (SELECT @rownum := 0) r, (SELECT str
FROM test
GROUP BY str
ORDER BY time DESC) test
) aa ON tt.str = aa.str
ORDER BY aa.rownum, time;
添加回答
舉報