2

给定如下表:

sqlite> CREATE TABLE movies( start_time int );
sqlite> INSERT INTO movies( start_time ) VALUES( 5 );
sqlite> INSERT INTO movies( start_time ) VALUES( 10 );
sqlite> INSERT INTO movies( start_time ) VALUES( 15 );
sqlite> INSERT INTO movies( start_time ) VALUES( 20 );
sqlite> INSERT INTO movies( start_time ) VALUES( 25 );
sqlite> INSERT INTO movies( start_time ) VALUES( 30 );
sqlite> INSERT INTO movies( start_time ) VALUES( 35 );
sqlite> 

假设我有两个时间点,开始时间为 17,结束时间为 34。我想要一个返回具有以下值的行的查询:15, 20, 25, 30

让我失望的是 15... 我知道 17 包含在与 15 关联的文件中,但我不希望其他行小于开始时间(例如 10 和 5)。

4

3 回答 3

3
SELECT start_time
FROM movies
WHERE start_time BETWEEN cast(17 / 5 as int) * 5
    AND cast(34 / 5 as int) * 5

SQL 小提琴示例

于 2012-07-06T00:43:01.583 回答
2

在我看来,这个问题有点未明确(并且没有 id 工作是不现实的)。也就是说,对于您的特定示例表,以下工作:

select * from movies
where
  start_time > 17 and start_time < 34
  or start_time in (select max(start_time) from movies
                    where start_time <= 17)
于 2012-07-06T01:03:10.723 回答
1

我确信有一种更清洁的方法可以做到这一点,但这是我关于如何实现这一点的想法。

SELECT start_time
FROM movies
WHERE start_time 
BETWEEN 17 - (SELECT start_time FROM movies GROUP BY DESC LIMIT 1) AND 34 - (SELECT start_time FROM movies GROUP BY DESC LIMIT 1)
于 2012-07-06T00:53:31.113 回答