条件where子句mysql

时间:2011-06-14 11:30:03

标签: mysql

我想在MySQL表中找到一个特定的时间段。

我想找到那个时期 1.过去开始(cursusperiode_van < now()
2.并将持续至少4周(cursusperiode_tot - INTERVAL 28 DAY > now()
3.如果我没有找到这个,我想找到第一个在此之后开始的那个(cursusperiode_van > now() order by cursusperiode_van asc limit 1)。

期间不重叠,至少不超过1天。

让我说我有

id:1 - period: 1 jan 2011 to 1 aug 2011
id:2 - period: 1 aug 2011 to 31 dec 2011

如果我在7月1日查询该数据库,我想查找id 1,如果我在7月23日查询,我想查找id 2

不太可能相关,但此查询将嵌入另一个查询,如

select * from cursus where cursus_periode_id in (
    select cursusperiode_id from cursusperiode_id where ...[panic!] ...
) and so on

我尝试使用IFNULL,CASE,但我似乎无法理解它。我如何将这两个粘贴在一起?
任何提示或帮助表示赞赏。谢谢。

1 个答案:

答案 0 :(得分:0)

您可以UNION两个查询,添加一个虚拟列以帮助排序并保留找到的第一个。

SQL声明

SELECT  c1.* 
FROM    cursus c1
        INNER JOIN (
            SELECT  1 AS Dummy
                    , cursusperiode_id 
            FROM    cursusperiode_id 
            WHERE   cursusperiode_tot - INTERVAL 28 DAY > now()
            UNION ALL    
            SELECT  2 AS Dummy
                    , cursusperiode_id 
            FROM    cursusperiode_id 
            WHERE   cursusperiode_van > now()    
        ) c2 ON c2.cursusperiod_id = c1.cursusperiod_id
ORDER BY
        c2.Dummy
        , c1.cursusperiode_van ASC
LIMIT   1