TOP N rows for a grouped query
方法一
SELECT ac.* FROM mytable AC LEFT JOIN mytable A ON A.id = AC.id WHERE A.id IN ( SELECT TOP 3 id FROM mytable A WHERE A.category = AC.category ORDER BY A.createtime DESC ) ORDER BY AC.category方法二(使用Having)
SELECT c.*, d.ranknum
FROM mytable AS c
INNER JOIN (
SELECT a.id, COUNT(*) AS ranknum
FROM mytable AS a
INNER JOIN mytable AS b ON (a.category = b.category) AND (a.num <= b.num)
GROUP BY a.id
HAVING COUNT(*) <= 3
) AS d ON (c.id = d.id)
ORDER BY c.category, d.ranknum
SELECT AC.* FROM historypath AC INNER JOIN (SELECT ROW_NUMBER() OVER(PARTITION BY A.car ORDER BY A.id) AS RowNumber, A.car FROM historypath A ) A ON A.car = AC.car WHERE A.RowNumber <= 3
SELECT& AC.*
FROM historypath AC
CROSS APPLY (SELECT TOP 3 id
FROM historypath A
WHERE A.car = AC.car
ORDER BY A.id desc
) A
ORDER BY A.id desc
留言
張貼留言