Android SQLite 3.7.12中的稍微复杂的条件选择
我有一个名为calls的表,其中包含以下记录Android SQLite 3.7.12中的稍微复杂的条件选择,android,sql,sqlite,Android,Sql,Sqlite,我有一个名为calls的表,其中包含以下记录 id number 1998 1234 1999 5678 2000 567890 2001 567890 2002 567890 2003 567890 2004 567890 2005 5645 2006 5612 我想选择所有符合以下2个条件的记录: 电话号码必须是567890 id位于number=567890的子选项中,但不是最大id。在这种情况下,2004 567890是例
id number
1998 1234
1999 5678
2000 567890
2001 567890
2002 567890
2003 567890
2004 567890
2005 5645
2006 5612
我想选择所有符合以下2个条件的记录:
电话号码必须是567890
id位于number=567890的子选项中,但不是最大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终端命令中不起作用,它显示了错误:near ORDER:syntax Error.,我尝试的是:
sqlite3 database.db "select * FROM calls where number='567890' ORDER BY _id DESC LIMIT 10 OFFSET 1;"
有时,number=567890的记录数量可能会有所不同,因此上述语句中的限制是无效的,如果它可以在REG search中使用与所有记录匹配的*等通配符?这里有一种方法:
select c.*
from calls c
where c.number = '567890' and
c.id <> (select max(c2.id) from calls c2 where c2.number = c.number);
报告说:
如果LIMIT表达式的计算结果为负值,则返回的行数没有上限
因此,要使用无限偏移:
SELECT * FROM calls WHERE number = '567890' ORDER BY _id DESC LIMIT -1 OFFSET 1;
显示准确的错误消息。是否存在_id列?该命令无法生成语法错误。您是否使用“复制+粘贴”来显示您正在使用的实际命令?@CL。向我显示错误:在订单附近,当我使用“删除”而不是“选择*”时,似乎“选择”很好。但是我还需要知道如何更改为删除。@njzk2实际上id是_id列,这有区别吗?对不起,我真的是一个新手。感谢limit-1技巧,但是当我在SQLite3命令上使用它时,它仍然向我显示错误:接近顺序:语法错误。我在kitkat 4.4.4 cm11下,我相信它使用SQLite 3.7.12。还有什么建议吗?谢谢。谢谢,即使我不知道c.*的确切含义,但它是有效的。还有一个问题,如果我把它改为DELETE,它会产生一个错误:靠近c:syntax error,我怎样才能使这个语句也能与DELETE一起工作呢?你只需要从调用中删除并更改后续的c。打电话。。