首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用MAX的mysql查询

问使用MAX的mysql查询
EN

Stack Overflow用户
提问于 2014-03-06 12:06:38
回答 1查看 44关注 0票数 2

我希望有人能帮我。我看过其他线程,但找不到正确的答案。

我有一个mysql数据库,其数据如下:

代码语言:javascript
复制
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年,我需要的结果是:

代码语言:javascript
复制
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年度,记录4取代记录1时,不显示记录1。

我尝试了以下查询,该查询成功了:

代码语言:javascript
复制
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之外的所有公司,它从记录1中选择所有字段,从记录4中选择日期!

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-06 12:15:28

利用mysql的非标准分组支持:

代码语言:javascript
复制
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的条件的重新处理,这是更优雅的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22224016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档