3 回答

TA貢獻(xiàn)2003條經(jīng)驗(yàn) 獲得超2個(gè)贊
SELECT i1.*FROM item i1LEFT OUTER JOIN item i2 ON (i1.category_id = i2.category_id AND i1.item_id < i2.item_id)GROUP BY i1. item_idHAVING COUNT(*) < 4ORDER BY category_id, date_listed;
item
item_id
item_id
item
.
i1
i2
i1
i1
SELECT *FROM ( SELECT i.*, @r := IF(@g = category_id, @r+1, 1) AS rownum, @g := category_id FROM (@g:=null, @r:=0) AS _init CROSS JOIN item i ORDER BY i.category_id, i.date_listed) AS tWHERE t.rownum <= 3;
WITH numbered_item AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY category_id ORDER BY item_id) AS rownum FROM item)SELECT * FROM numbered_item WHERE rownum <= 4;

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超7個(gè)贊
ROW_NUMBER
SELECT category_id, image, date_listedFROM( SELECT category_id, image, date_listed, ROW_NUMBER() OVER (PARTITION BY category_id ORDER BY date_listed DESC) AS rn FROM item) AS T1WHERE rn <= 4
ROW_NUMBER
SELECT category_id, image, date_listedFROM( SELECT category_id, image, date_listed, @rn := IF(@prev = category_id, @rn + 1, 1) AS rn, @prev := category_id FROM item JOIN (SELECT @prev := NULL, @rn = 0) AS vars ORDER BY category_id, date_listed DESC) AS T1WHERE rn <= 4
intially@prev設(shè)置為null,@rn設(shè)置為0。 對(duì)于我們看到的每一行,檢查類別_id是否與前一行相同。 如果是,增加行號(hào)。 否則,啟動(dòng)一個(gè)新類別并將行號(hào)重置為1。 子查詢完成后,最后一步是過(guò)濾,以便只保留行號(hào)小于或等于4的行。
添加回答
舉報(bào)