我想在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,但我似乎无法理解它。我如何将这两个粘贴在一起?
任何提示或帮助表示赞赏。谢谢。
答案 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