在指定记录后给出X记录的SQL语句
是否可以编写一条SQL语句来检索包含条件Y的条件为Y的记录之后的X个连续记录?在指定记录后给出X记录的SQL语句
例如,由于该表:
id name
------------------------------
1 aaa
5 bbb
10 ccc
15 ddd
20 eee
25 fff
30 ggg
我先申请标准Z,像
SELECT * WHERE (id>4) AND (id<26) ORDER BY id ASC
那么我留下了一个清单:
id name
------------------------------
5 bbb
10 ccc
15 ddd
20 eee
25 fff
我想要知道是否有可能从name ='ddd'(或其他一些标准Y)的这个列表中检索2条记录,即retu上例中的“ddd”和“eee”记录。
它必须可以直接在SQL中做到这一点,但恐怕我缺乏知道它的里程数。
SELECT *
FROM yourTable
WHERE id > 4
AND id < 26
AND id >= (SELECT min(id)
FROM yourTable
WHERE id > 4
AND id < 26
AND name = 'ddd'
)
ORDER BY id
LIMIT 2
;
在你的措辞:
SELECT *
FROM yourTable
WHERE (criterionZ)
AND sortingField >=
(SELECT min(sortingField)
FROM yourTable
WHERE (criterionZ)
AND (criterionY)
)
ORDER BY sortingField
LIMIT X
;
非常感谢您使用更通用的伪版本,非常有帮助 – JoshuaDavid 2011-03-17 21:09:11
注意:如果我们将DESC而不是ASC排序,则min()应该是max(),并且> =变成 JoshuaDavid 2011-03-17 21:11:00
是,'MAX'而不是'> =':'... sortedField 2011-03-17 21:14:48
加限制条款
SELECT * WHERE (id>4) AND (id<26) ORDER BY id ASC limit 2,2
编辑。
select * from table where id > (
select id from table where name = 'eee')
order by id
limit 2
使得推定你的身份证号码是连续的,你可以使用子查询:
SELECT * FROM table WHERE id >= (SELECT id FROM table WHERE name = 'ddd' LIMIT 1) LIMIT 2
这会影响到重新计算*“criteriaZ”*。如果例如第一行有'id = 1,name ='ddd'',它会给出错误的结果。如果在子查询中添加AND ID> 4和ID 2011-03-17 20:44:57
也许COUNT的组合() OFFSET()和LIMIT()? – JoshuaDavid 2011-03-17 20:19:50