根据实际日期查找条目

时间:2015-05-11 16:24:02

标签: mysql

如何从数据库表中找到一些特定条目。 当今天的日期在开始和结束之间并且状态为1时我需要ref的值。如果日期不在开始和结束之间那么我需要ref的值如果start和end是'0000-00-00'并且州是1。

ref start end state 1 0000-00-00 0000-00-00 1 1 2015-07-18 2015-09-05 1 2 0000-00-00 0000-00-00 0 2 2015-05-23 2015-09-04 0 3 0000-00-00 0000-00-00 1 4 2015-07-18 2015-09-05 0 5 0000-00-00 0000-00-00 1 5 2015-07-18 2015-09-05 0 6 0000-00-00 0000-00-00 1 6 2015-07-18 2015-09-05 1 7 0000-00-00 0000-00-00 1 7 2015-06-27 2015-09-04 0 8 0000-00-00 0000-00-00 1 8 2015-06-27 2015-09-04 0 9 0000-00-00 0000-00-00 1 9 2015-06-27 2015-09-04 0 10 0000-00-00 0000-00-00 0 10 2015-06-27 2015-09-04 1 11 0000-00-00 0000-00-00 1 11 2015-06-27 2015-09-04 0 12 0000-00-00 0000-00-00 1 12 2015-06-27 2015-09-04 0 13 0000-00-00 0000-00-00 1 13 2015-05-23 2015-09-04 0 14 0000-00-00 0000-00-00 0 14 2015-05-23 2015-09-04 1 15 0000-00-00 0000-00-00 1 15 2015-05-23 2015-09-04 0 16 0000-00-00 0000-00-00 1 16 2015-05-23 2015-09-04 0 17 0000-00-00 0000-00-00 1 17 2015-05-23 2015-09-04 0

2 个答案:

答案 0 :(得分:1)

试试这个:

select ref
from table
where state = 1
    and ((mydate between start and end)
    or (start = 0000-00-00 and end=0000-00-00 and mydate not between start and end))

答案 1 :(得分:1)

表中的条目与我预期的不同。请参阅以下查询下面的示例数据。这个查询非常符合我的需要:

SELECT ref FROM table  
LEFT JOIN (  
SELECT ref AS def_ref, COUNT(ref) AS count1  
  FROM table  
  WHERE start = mydate  
  GROUP BY def  
) def ON pi.hausnr = def_ref  
WHERE IF(  
  start = mydate  
  , state = 1  
  IF(  
    start = '0000-00-00' AND end = '0000-00-00' AND count1 IS NULL  
    , state = 1  
    0  
  )  
)  

'ref'-Number可能只有一个条目,其中0000-00-00是开始和结束的值。或者有多个条目。如果有一个mydate在start和end之间的条目,那么应该忽略具有相同'ref'-Number和0000-00-00的条目。 ref start end state 1 0000-00-00 0000-00-00 1 2 0000-00-00 0000-00-00 0 3 0000-00-00 0000-00-00 1 4 0000-00-00 0000-00-00 1 4 2015-07-18 2015-09-05 0 5 0000-00-00 0000-00-00 1 5 2015-07-18 2015-09-05 0 5 2015-09-06 2015-10-09 1 5 2015-10-10 2015-10-22 0 6 0000-00-00 0000-00-00 1 6 2015-07-18 2015-09-05 1 7 0000-00-00 0000-00-00 1 7 2015-06-27 2015-09-04 0 8 0000-00-00 0000-00-00 1 8 2015-06-27 2015-09-04 0 ...