我有这张桌子:
+--------+---------+-----------+------------+
| 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
但是失败了!
感谢您的帮助! :)
答案 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