如何从数据库表中找到一些特定条目。 当今天的日期在开始和结束之间并且状态为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
答案 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
...