具有特定LIMIT的SQL

时间:2011-06-17 09:28:52

标签: mysql sql

我有下一个示例表:

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

你能帮我生成这个查询吗?

3 个答案:

答案 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_idt2)匹配的所有结果(查看限制函数的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