表数据如下:
问题,id字段是主键,不重复;name有重复,date是datetime类型,
你要查询出每个name对应的最新时间,以及对应的id。
查询结果如下:
查询语句如下:
select * from For_test as a
where date in(select max(date) from For_test where name=a.name)
where date in(select max(date) from For_test where name=a.name)
语句解析:
1.用表连接,首先查询出每个name对应的最新时间。
select max(date) from For_test where name=a.name
这条语句,进行了两张表的连接。两张表相同name的最新时间都查询出来。是不是效果如同select name,max(date) from For_test group by name
因此有查询语句2,达到一样的效果
select * from For_test as a
where exists(select name,max(date) from For_test group by name having a.date=max(date))
where exists(select name,max(date) from For_test group by name having a.date=max(date))
2.进行表1与表2的date关联,然后把同行的id 显示出来。
3.思考为什么如下代码实现不了?
select id,name,max(date) from For_test group by name,id