我有下一个示例表:
id | user_id | data
-------------------
1 | 1 | 10
2 | 2 | 10
3 | 2 | 10
4 | 1 | 10
5 | 3 | 10
6 | 4 | 10
7 | 4 | 10
8 | 5 | 10
9 | 5 | 10
10 | 2 | 10
11 | 6 | 10
12 | 3 | 10
13 | 1 | 10
我需要创建一个SELECT查询,它限制我的数据。例如,我有一个限制范围(1,3)(页码= 1,行数= 3)。它应该选择前3个唯一user_id
的行。如果表格的末尾有一些行带有第一个user_id
,那么它们应该包含在结果中。 LIMIT语句对此查询不好,因为我可以获得超过3行。我的限制输出应为:
id | user_id | data
-------------------
1 | 1 | 10
2 | 2 | 10
3 | 2 | 10
4 | 1 | 10
5 | 3 | 10
10 | 2 | 10
12 | 3 | 10
13 | 1 | 10
你能帮我生成这个查询吗?
答案 0 :(得分:3)
怎么样:
SELECT *
FROM table
WHERE user_id IN
(SELECT distinct(user_id) FROM table order by user_id LIMIT 3);
答案 1 :(得分:2)
这样的事情怎么样?
SELECT * FROM table WHERE user_id BETWEEN (number) AND (number+row count)
我知道它不起作用,但你应该能够使它工作^^
答案 2 :(得分:1)
以下示例代码可用于Oracle& Mysql的。 (对SQL Server和Sybase使用TOP
您从表格t1
)获得与前3 user_id
(t2
)匹配的所有结果(查看限制函数的MySQL手册)
SELECT *
FROM exampletable t1
INNER JOIN (
SELECT DISTINCT user_id
FROM exampletable
ORDER BY user_id
LIMIT 0,3 -- this is the important part
) AS t2 ON t1.user_id = t2.user_id
ORDER BY id
对于接下来的3个ID,将limit 0,3
更改为limit 3,6
。