在SQLite 3.7.12中有点复杂的条件SELECT

时间:2014-11-04 18:00:27

标签: 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个需求的所有记录:

  1. 号码必须为“567890”
  2. “id”在数字= 567890的子SELECT中,但不是最大ID。在这种情况下,“2004 567890”是例外。
  3. 所以结果将是:

    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终端命令,它向我显示“错误:接近”ORDER“:语法错误。”,我试过的是:

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

    有时,数字= 567890的记录数量可能会有所不同,所以上述语句中的“LIMIT”无效,如果它可以在REG搜索中使用像*这样的野生代码来匹配所有这些吗?

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

documentation说:

  

如果LIMIT表达式求值为负值,则返回的行数没有上限。

所以要使用LIMITless OFFSET:

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