想象我们有一家美丽的酒店。这家酒店的数据库只有一个表:
room check-in check_out other columns...
1 2020-02-04 2020-02-05 ...
1 2020-02-06 2020-02-09 ...
1 2020-04-20 NULL ...
2 2020-03-29 2020-04-01 ...
2 2020-04-17 2020-04-18 ...
用其他列的值]为每个房间选择最后一个登机的最佳和有效的方法是什么(否则我将只使用room, max(check-in)
?
预期结果是
room check_in check_out other columns... 1 2020-04-20 NULL ... 2 2020-04-17 2020-04-18 ...
我想到的第一个想法是将该表及其副本加入其中:
WITH last_checkins AS ( SELECT room, max(check_in) AS last_c FROM rooms GROUP BY room ) SELECT * FROM rooms r INNER JOIN last_chekins c ON r.room = c.room AND r.checkin = c.last_c;
我对此想法不满意
我想知道我的关注点相关吗?
想象我们有一家美丽的酒店。这家酒店的数据库只有一个表:房间登记入住check_out其他列... 1 2020-02-04 2020-02-05 ... 1 2020-02-06 2020-02-09 ... 1。 ..
最方便的可能是row_number()
: