2011-03-17 63 views
1

是否可以編寫一條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中做到這一點,但恐怕我缺乏知道它的里程數。

+0

也許COUNT的組合() OFFSET()和LIMIT()? – JoshuaDavid 2011-03-17 20:19:50

回答

2
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 
; 
+0

非常感謝您使用更通用的僞版本,非常有幫助 – JoshuaDavid 2011-03-17 21:09:11

+0

注意:如果我們將DESC而不是ASC排序,則min()應該是max(),並且> =變成<= – JoshuaDavid 2011-03-17 21:11:00

+0

是,'MAX'而不是'> =':'... sortedField <=(SELECT MAX(...' – 2011-03-17 21:14:48

1

加限制條款

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 
1

使得推定你的身份證號碼是連續的,你可以使用子查詢:

SELECT * FROM table WHERE id >= (SELECT id FROM table WHERE name = 'ddd' LIMIT 1) LIMIT 2 
+0

這會影響到重新計算*「criteriaZ」*。如果例如第一行有'id = 1,name ='ddd'',它會給出錯誤的結果。如果在子查詢中添加AND ID> 4和ID <26',並在外部查詢中添加ORDER BY,則99%正確。 – 2011-03-17 20:44:57