2016-12-14 70 views
1

我有一个sqllite db表的一些数据形式(MYTABLE):Sqllite:2个日期之间选择记录,包括其间的行

id column1 date 
111 280 2014-02-01 
112 281 invalid invalid invalid 
113 282 invalid invalid invalid 
114 275 2014-02-01 
...................... 
338 273 2014-02-28 

我想选择在二月的所有记录。有一些中间记录是无效的,没有日期。我想:

SELECT * FROM mytable WHERE date BETWEEN '2014-02-01' AND '2014-03-01' 

但这跳过中间的记录

我想选择这些为好,让我结束了除ID的所有列之间111-338

所有记录id为文本格式。

我该怎么做?

+0

您需要一个规则如何用正确的日期替换无效的日期。如果表格数据像'111 280 2014-02-01 112 281无效无效无效 113 275 2014-04-01'?在'2014年2月1日'和'2014年3月1日'之间无效? – Serg

回答

3

不要有sqlite的权利,但现在这应该给你一个开始:

select max(id) as max_id, min(id) as min_id 
from mytable 
where date BETWEEN '2014-02-01' AND '2014-03-01' 

然后

select * 
from mytable where id >= min_id and id <= max_id 

我认为这将使它在短短的一个查询:

select mytable.* 
from (select max(id) as max_id, min(id) as min_id 
     from mytable 
     where date BETWEEN '2014-02-01' AND '2014-03-01' 
) as internal, mytable 
where mytable.id >= internal.min_id and mytable.id <= internal.max_id 
+0

谢谢,这似乎工作! – user61629