2014-05-11 135 views
0

我有一个包含一些数据的表。它看起来像:选择一个行匹配条件或第一个匹配条件,如果没有任何匹配条件

MariaDB [lokatnik]> SELECT id_elixir, start_time FROM elixir ORDER BY start_time ASC; 
+-----------+------------+ 
| id_elixir | start_time | 
+-----------+------------+ 
|   3 | 00:00:00 | 
|   1 | 12:30:00 | 
|   2 | 13:30:00 | 
+-----------+------------+ 
3 rows in set (0.00 sec) 

现在,我需要选择具体哪一行匹配时间条件 - 说 - START_TIME> some_time。

例如:

  • 当some_time是10:00,然后我需要id_elixir行= 1(首先用的时间比10:00多行),
  • 当some_time是13:00 ,那么我需要一排id_elixir = 2(如上),
  • 时some_time时间为14:00,然后我需要id_elixir ROW = 3

我怎样才能使用SQL此行(和MySQL/MariaDB DBMS)?

+0

什么是'start_time'列数据类型? –

+0

这是TIME的类型。 –

+0

将时间与00:00:00比较是非常不可能的,因为它可能是午夜的同一天或次日的午夜。所以'> '14:00''将会失败并且会返回意想不到的结果。 –

回答

0

也许,这样的事情会为你工作:

SELECT 
    * 
FROM 
    elixir 
WHERE 
    CASE 
    WHEN start_time BETWEEN CAST('10:00:00' AS TIME) AND CAST('13:00:00' AS 
     TIME) 
    THEN id =1 
    WHEN start_time BETWEEN CAST('13:00:00' AS TIME) AND CAST('14:00:00' AS 
     TIME) 
    THEN id   =2 
    WHEN start_time > CAST('14:00:00' AS TIME) 
    THEN id   =3 
    ELSE true 

但实际上你可以检查,通过使用简单的布尔运算符:

SELECT 
    * 
FROM 
    elixir 
WHERE 
    (
    start_time BETWEEN CAST('10:00:00' AS TIME) AND CAST('13:00:00' AS TIME) 
    AND id =1 
) 
OR 
    (
    start_time BETWEEN CAST('13:00:00' AS TIME) AND CAST('14:00:00' AS TIME) 
    AND id =2 
) 
OR 
    (
    start_time > CAST('14:00:00' AS TIME) 
    AND id  =3