2014-11-04 47 views
-1

我有一個名爲「電話」有以下記錄點點複合條件選擇3.7.12

id  number 
1998 1234 
1999 5678 
2000 567890 
2001 567890 
2002 567890 
2003 567890 
2004 567890 
2005 5645 
2006 5612 

我想選擇所有具有條件的記錄有以下2個需求相結合:

  1. 號碼必須是「567890」
  2. 「id」位於號碼= 567890的子SELECT中,但不是最大ID。在這種情況下,「2004 567890」是例外。

這樣的結果將是:

id  number 
2000 567890 
2001 567890 
2002 567890 
2003 567890 

我試過這樣:

select * FROM calls where number='567890' ORDER BY _id DESC LIMIT 10 OFFSET 1; 

該工程對SQLiteSpy,但這不是在Android的終端命令的工作,這說明我「Error:near」ORDER「:syntax error。」,我試過的一個是:

sqlite3 database.db "select * FROM calls where number='567890' ORDER BY _id DESC LIMIT 10 OFFSET 1;" 

有時,number = 567890的記錄數量可能會有所不同,因此上述語句中的「LIMIT」無效,如果它可以在REG搜索中使用像*這樣的野生代碼,它可以匹配所有這些代碼?

+0

顯示確切的錯誤信息。 – 2014-11-04 18:02:33

+0

是否有'_id'列? – njzk2 2014-11-04 18:04:22

+0

該命令無法生成語法錯誤。您是否使用複製粘貼來顯示您正在使用的實際命令? – 2014-11-04 18:29:41

回答

1

這裏有一種方法:

select c.* 
from calls c 
where c.number = '567890' and 
     c.id <> (select max(c2.id) from calls c2 where c2.number = c.number); 
+0

謝謝,即使我不知道什麼是c。*的意思,但它的工作原理。進一步的問題,如果我將其更改爲DELETE,它會產生一個錯誤「Error:near」c「:syntax error」,我怎樣才能使這個語句與DELETE一起工作呢? – user3127293 2014-11-04 18:39:42

+0

您可以執行'從通話中刪除'並將後續的'c.'更改爲'calls.'。 – 2014-11-04 23:03:59

0

documentation說:

If the LIMIT expression evaluates to a negative value, then there is no upper bound on the number of rows returned.

所以使用無限OFFSET:

SELECT * FROM calls WHERE number = '567890' ORDER BY _id DESC LIMIT -1 OFFSET 1; 
+0

感謝您的「限制-1」技巧,但是當我在SQLite3命令中使用它時,它仍然顯示「Error:near」ORDER「:syntax error。我在kitkat 4.4.4 cm11下,我相信它使用SQLite 3.7.12。還有什麼建議嗎?謝謝。 – user3127293 2014-11-04 18:25:48