我需要查询如下所示的MySQL数据库表:

Bike  Owner  Date
-----------------------
1     Oscar  2014-02-02
2     Oscar  2014-02-02
3     John   2014-04-28
4     Jane   2014-05-29
2     John   2015-04-16
3     Mike   2015-06-16
1     Bob    2015-07-16
4     John   2015-08-16
2     Mike   2016-04-16
3     John   2016-04-16


它包含4辆自行车,一旦自行车从所有者处切换,该表中便会放置一条新记录。由于此表没有'until'属性,因此我将继续创建一个查询,以在特定日期(例如2015-07-06)获取所有自行车的所有所有者。

现在有人可以轻松地做到这一点吗?我可以想到通过创建函数或临时表来实现此目的的方法,但是对于这样一个简单的问题,这似乎太牵强了。

谢谢!

最佳答案

一种方法使用显式join和聚合:

select b.*
from (select bike, max(date) as maxdate
      from bikes b
      where date <= '2015-07-06
      group by bike
     ) bd join
     bikes b
     on b.bike = bd.bike and b.date = bd.maxdate;


一种更短的编写方式:

select b.*
from bikes b
where b.date = (select max(b2.date) from bikes b2 where b2.bike = b.bike);

关于mysql - 在SQL中用日期查询表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36645617/

10-12 13:04