如何在限制一个SQL查询中不同ID的数量的同时获取不同数量的行?

如何在限制一个SQL查询中不同ID的数量的同时获取不同数量的行?

问题描述:

假设我有一张桌子,里面有两个id,series_id和match_id。 series_id可以重复,但match_ids是唯一的。另外,每个系列可能的match_ids数量可以在1到5之间变化。我想要选择排名前10的系列以及与它们相关的所有match_ids。换句话说,如果我想选择前10名,我最终可以选择少至10个match_ids或多达50个match_ids。我怎样才能做到这一点?如何在限制一个SQL查询中不同ID的数量的同时获取不同数量的行?

编辑:这是前10个匹配ID的示例列表。

MatchID SeriesID 
250059 3155 
260071 3156 
260086 3163 
270079 3157 
270080 3157 
270081 3157 
340566 3123 
340607 3124 
350551 3123 
350552 3123 

如您所见,SeriesId重复三次。对于3157,并且至少两次,每次3123

理想情况下,我会希望以下内容:

MatchID  SeriesID 
1001400020  3150 
1001400019  3150 
1001400010  3150 
270081   3157 
270080   3157 
270079   3157 
1001320026  3151 
1001320025  3151 
1001320024  3151 
1001320023  3151 
1001320017  3151 
750596   3146 
750595   3146 
750592   3146 
750591   3146 
760569   3145 
760568   3145 
760567   3145 
760566   3145 
760565   3145 
760517   3144 
760515   3144 
760512   3144 
1001380039  3131 
1001380038  3131 
1001380037  3131 
1001380034  3131 
1001310030  3128 
1001310029  3128 
1001300036  3128 
1001370029  3130 
1001370028  3130 
1001370027  3130 
1001370026  3130 
1001370020  3130 
260086   3163 

因为在这种情况下,一系列独特的ID数为10总。

+1

也可以显示数据和期望输出的例子吗? –

+0

match_id是唯一的还是match_id和series_id的组合是唯一的? –

这工作在MySQL:

SELECT * 
FROM myTable m INNER JOIN 
(SELECT DISTINCT series_id 
    FROM myTable 
    ORDER BY series_id 
    LIMIT 10) t ON t.series_id = m.series_id 

SqlFiddle demo

+0

你是个野兽,谢谢你! – avbor