在sqlite中选择结果集之前的行

时间:2010-08-20 04:05:40

标签: sql sqlite

所以我假设我有一个名为data

的表格

数据

id | date      | name
---------------------    
1  | 19/8/2010 | John    
2  | 19/8/2010 | Mary    
3  | 20/8/2010 | Peter    
4  | 20/8/2010 | Bert     
5  | 20/8/2010 | Ernie 

如果我这样做一个选择语句

SELECT * FROM data where date = '20/8/2010';

是否可以编辑此select语句以获取它之前的行。在这种情况下,它返回行号3 - 5.但是可以以任何方式编辑sqlstatement以选择第2行吗?

6 个答案:

答案 0 :(得分:2)

我对SQLITE一无所知,但对于SQL Server,我可能会做类似的事情:

SELECT * FROM (SELECT TOP 1 * FROM data where date < '20/8/2010' ORDER BY date DESC, id DESC)
UNION
SELECT * FROM data where date = '20/8/2010'
;

这假定您的“之前的行”的条件是具有最大日期&lt;的行。您查询的日期,如果有多行具有该日期,则抓住具有最大ID的那一行。

答案 1 :(得分:1)

Select d.* 
from data d, 
(SELECT min(id) As LowestID FROM data where date = '20/8/2010') m
where d.id=m.LowestID-1

答案 2 :(得分:1)

使用原始查询调整@SteveCav's solutionUNION

SELECT d.* 
FROM   data d
JOIN   (
          SELECT MIN(id) lowest_id
          FROM   data 
          WHERE  date = '20/8/2010'
       ) dt ON (dt.lowest_id - 1 = d.id)
UNION
SELECT * 
FROM   data 
WHERE  date = '20/8/2010';

测试用例(在sqlite 3中测试):

CREATE TABLE data (id int, date date, name varchar(10));

INSERT INTO data VALUES (1, '19/8/2010', 'John');
INSERT INTO data VALUES (2, '19/8/2010', 'Mary');
INSERT INTO data VALUES (3, '20/8/2010', 'Peter');
INSERT INTO data VALUES (4, '20/8/2010', 'Bert');
INSERT INTO data VALUES (5, '20/8/2010', 'Ernie');

结果:

id          date        name      
----------  ----------  ----------
2           19/8/2010   Mary      
3           20/8/2010   Peter     
4           20/8/2010   Bert      
5           20/8/2010   Ernie 

这假设通过“之前的行”,您打算使用前一个id值的行。

答案 3 :(得分:1)

Select Id, [Date], Name
From MyTable
Where [Date] = '2010-08-20'
Union All
Select Id, [Date], Name
From MyTable
Where Id = (
            Select Max(T2.Id)
            From MyTable As T2
            Where T2.[Date] < '2010-08-20'
            )

答案 4 :(得分:0)

也许这接近你想要的东西:

 SELECT * FROM data where date <= '20/8/2010' order by date desc;

然后在8月20日之前有第一行后停止读取结果。

答案 5 :(得分:0)

上述查询结果在当前列表中可用后,您可以使用游标访问任何返回的行。