我有 2 个表:
___房间
|--------|------------|
| ROO_Id | ROO_Number |
|--------|------------|
| 22 | 101 |
| 23 | 102 |
| 24 | 201 |
|--------|------------|
___预订
|--------|------------|------------|------------|-------------------|
| BOO_Id | BOO_RoomId | BOO_DateCI | BOO_DateCO | BOO_ArrivalStatus |
|--------|------------|------------|------------|-------------------|
| 34 | 22 | 2018-07-17 | 2018-07-20 | checkin |
| 35 | 23 | 2018-07-17 | 2018-07-18 | checkout |
| 36 | 24 | 2018-07-19 | 2018-07-21 | none |
| 37 | 23 | 2018-07-18 | 2018-07-21 | none |
|--------|------------|------------|------------|-------------------|
我的目标是获得以下报告:
The date of the report is today :
2018-07-18
.
|------------|----------------|-------------------|
| ROO_Number | BOO_LiveStatus | BOO_ArrivalStatus |
|------------|----------------|-------------------|
| 101 | in-house | checkin |
| 102 | none | no |
| 201 | none | no |
|------------|----------------|-------------------|
我在这里放了一个 SQLFidde : http://sqlfiddle.com/#!9/bb6a30/4
其实我已经很接近了,但是我有一点问题。
我需要每个房间只有一行。对于 102 号房间,我有两个连续的预订,我的查询为它返回了两行,而它应该返回给我 具有更高 ID (BOO_Id) 的预订
。
我最后一次尝试是这个:
SELECT
ROO_Id,
IF(BOO_DateCI <= '2018-07-18' AND BOO_DateCO >= '2018-07-18', "in-house", "no")
AS BOO_LiveStatus,
IFNULL(BOO_ArrivalStatus, "0")
AS BOO_ArrivalStatus,
BOO_Id,
FROM ___Rooms
LEFT JOIN ___Bookings
ON ___Rooms.ROO_id = ___Bookings.BOO_RoomId
AND '2018-07-18' BETWEEN ___Bookings.BOO_DateCI AND ___Bookings.BOO_DateCO
WHERE ROO_Status != 'inactive'
ORDER BY
ROO_Number
你能帮帮我吗?
非常感谢。
最佳答案
你应该通过 BOO_RoomId 在 max(BOO_DateCI) 组上添加一个内部连接
SELECT
ROO_Id,
IF(BOO_DateCI <= '2018-07-18' AND BOO_DateCO >= '2018-07-18', "in-house", "no")
AS BOO_LiveStatus,
IFNULL(BOO_ArrivalStatus, "0")
AS BOO_ArrivalStatus,
BOO_Id
FROM ___Rooms
inner join (
select BOO_RoomId,max(BOO_DateCI) max_BOO_DateCI
from ___Bookings
group by BOO_RoomId
) t on t.BOO_RoomId = ___Rooms.ROO_id
LEFT JOIN ___Bookings
ON ___Rooms.ROO_id = ___Bookings.BOO_RoomId
AND '2018-07-18' BETWEEN ___Bookings.BOO_DateCI AND ___Bookings.BOO_DateCO
AND t.max_BOO_DateCI= ___Bookings.BOO_DateCI
ORDER BY
ROO_Number
关于mysql - 仅从 MySQL 查询中返回较高的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51406164/