2009-06-07 95 views
1

我有这个表:如何为此创建查询?

+--------+---------+-----------+------------+ 
| bed_id | bed_num | place_id | bed_date | 
+--------+---------+-----------+------------+ 
|  1 |  150 |   1 | 1244344305 | 
|  2 |  250 |   1 | 1244345469 | 
|  3 |  145 |   2 | 1244348496 | 
|  3 |  146 |   2 | 1244348497 | 
+--------+---------+-----------+------------+ 

我想选择所有的独特place_id s的最近的bed_num日期,所以应该返回类似如下:

+--------+---------+-----------+------------+ 
| bed_id | bed_num | place_id | bed_date | 
+--------+---------+-----------+------------+ 
|  2 |  250 |   1 | 1244345469 | 
|  3 |  146 |   2 | 1244348497 | 
+--------+---------+-----------+------------+ 

我已经试过混合GROUP BY和ORDER BY使用不同的(place_id)AND max(bed_date)

但是失败!

感谢您的帮助! :)

回答

3

由于您想获得一些汇总数据(place_id,bed date)和其他非汇总数据(bed_id和bed_num),您需要使用subselect来完成汇总,然后加入它是一个匿名的观点:

SELECT bed_id, bed_num, place_id, bed_date 
FROM beds 
INNER JOIN (SELECT place_id, MAX(bed_date) FROM beds GROUP BY place_id) max_dates 
ON max_dates.place_id = beds.place_id AND max_dates.bed_date = beds.bed_date 

否则,你总“分组依据”将适用于所有列,你会得到一个(可能是随机的)bed_id和bed_num从总

+0

结了一些完美的语法修正,非常感谢你!,我一整天都在磨我的脑袋。由于查询本身在另一个查询子查询中,现在总共有2个子查询,这会是一个问题,性能虎钳 – saint 2009-06-07 06:13:37