我的表格(validfrom
以及validto
和03JUL2014
所有类型都是DATE
,而不是STRING
)< / p>
id type validfrom validto
-------------------------------------
1 "APPLE" 10MAY2011 15APR2012
1 "APPLE" 19APR2012 15APR2017
1 "ORANGE" 10MAY2011 15APR2012
1 "ORANGE" 19APR2012 15AUG2018
1 "PEAR" 10MAY2012 15APR2013
1 "PEAR" 10MAY2011 15APR2018
2 "APPLE" 10MAY2011 15APR2017
2 "APPLE" 10MAY2011 15APR2012
2 "ORANGE" 10MAY2011 15APR2012
2 "ORANGE" 10MAY2011 15APR2015
2 "ORANGE" 10MAY2007 15APR2019
2 "PEAR" 10MAY2003 15APR2012
2 "PEAR" 10MAY2006 15APR2022
我想检索id
为2
且validto
大于03JUL2014
的所有记录。
因此我必须得到:
2 "APPLE" 10MAY2011 15APR2017
2 "ORANGE" 10MAY2007 15APR2019
2 "PEAR" 10MAY2006 15APR2022
我试过了:
SELECT type, validfrom, MAX(validto) FROM crew_qualifications
WHERE id=2 AND validto >= 03JUL2014
它只给了我:
2 "PEAR" 10MAY2006 15APR2022
答案 0 :(得分:2)
在你的查询中你写MAX(validto)然后它只返回那个有效值为max的行
你删除MAX(validto)然后返回正确的ans
答案 1 :(得分:0)
首先找到给定时间范围内每种类型的最大日期。然后再次加入你的桌子以获得完整的记录。
select cq.type, cq.validfrom, cq.validto
from crew_qualifications cq
join
(
select type, max(validto) as validto
from crew_qualifications
where validto >= '2014-07-03'
group by type
) wanted_cq
on wanted_cq.type = cq.type and wanted_cq.validto = cq.validto;
关于您的查询:您选择不带组的MAX(validto),因此您获得整个表的MAX(validto),即一个记录。除了MAX(validto)之外,您还可以从表中获得随机类型和随机有效值,因为您没有指定要查看的类型和有效值(最小值,最大值或平均值)。 (除了validto >= 03JUL2014
应该会给你一个语法错误。我很惊讶它显然没有。我不知道,MySQL如何解释这里。)