我希望有一个人可以帮助我。我看过其他线程,但找不到正确的答案。
我有一个包含以下数据的mysql数据库:
id, company, datefrom, dateto, rate, point1, point2
1, DHL, 2014-03-01, 2014-03-31, $1000, Paris, New York
2, MRW, 2014-03-01, 2014-03-31, $1300, Paris, New York
3, EXP, 2014-03-01, 2014-03-31, $1000, Paris, New York
4, DHL, 2014-03-06, 2014-03-31, $900, Paris, New York
5, FED, 2014-03-01, 2014-03-31, $1200, Paris, New York
我需要执行一个查询,在该查询中,基于日期,它将仅显示该日期之后的有效汇率。例如,如果今天是2014-03-06,我需要结果是:
2, MRW, 2014-03-01, 2014-03-31, $1300, Paris, New York
3, EXP, 2014-03-01, 2014-03-31, $1000, Paris, New York
4, DHL, 2014-03-06, 2014-03-31, $900, Paris, New York
5, FED, 2014-03-01, 2014-03-31, $1200, Paris, New York
如您所见,记录1不会显示为记录4替换了记录1(截至2014-03-06)
我尝试了以下查询,该查询有效:
SELECT id, company, MAX(datefrom), dateto, rate, point1, point2 FROM mydatabase
WHERE datefrom<='2014-03-06' and datefrom>='2014-03-06'
AND point1='Paris' AND point2='New York' GROUP BY company, point1, point2
除了选择DHL的所有公司外,此查询的工作情况非常好,但对于DHL,它从记录1中选择所有字段,但从记录4中选择日期!
我究竟做错了什么?
利用mysql的非标准分组支持:
SELECT * FROM (
SELECT * FROM mydatabase
WHERE '2014-03-06' BETWEEN datefrom AND dateto
AND point1 = 'Paris'
AND point2 = 'New York'
ORDER BY datefrom DESC) x
GROUP BY company
该作品由第一顺序匹配的行通过最新启动的范围首先在内部查询,然后通过并非所有非聚合列,MySQL的选择分组第一行中的每个唯一值company
,第一行是一个你想要的(有先前已订购)。
还请注意,使用条件的重做BETWEEN
更为优雅。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句