如何为此构建查询?

时间:2009-06-07 05:58:42

标签: mysql

我有这张桌子:

+--------+---------+-----------+------------+
| 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的所有唯一bed_num,因此它应返回如下内容:

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

我尝试使用distinct(place_id)AND max(bed_date)混合GROUP BY和ORDER BY

但是失败了!

感谢您的帮助! :)

1 个答案:

答案 0 :(得分: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