2014-11-04 45 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