2014-12-29 24 views
1

我有三個表room_charges,room_category和patient_detailMYSQL:空置/有人佔用的房間爲現在

room_category 
id room_category 
1  twin 
2  classic 
3  Deluxe 

room_charges 
id room_name room_category 
1 tw1  1 
2 tw2  1 
3 cl1  2 
4 cl2  2 
5 dl1  3 

patient_detail 

id patient_name room_name room_category admission_date_time discharge_date_time discharged 
1 Mr x    1  1   10-12-14 10:40  12-12-14 08:40  1 
2 Mr y    1  1   12-12-14 11:40  15-12-14 13:10  1 
3 mr z    1  1   15-12-14 14:40    null   null 

我使用的查詢,找到vacant_beds細節,但按照該patient_detail表ROOM_ID 1被佔用,但我得到空置。 我使用的查詢是這樣的:

select `rc`.`id` AS `id`, 
     `rct`.`room_category` AS `room_category`, 
     group_concat(`rc`.`room_name` separator ',') AS `vacant_beds` 
from ((`room_charges` `rc` 
     left join `patient_detail` `pd` on((`rc`.`id` = `pd`.`room_name`))) 
     join `room_category` `rct` on((`rc`.`room_category` = `rct`.`id`))) 
where ((`pd`.`discharged` = 1) or isnull(`pd`.`admission_date_time`)) 
group by `rc`.`room_category` 
having max(admission_date_time) 

我創建一個視圖來獲得空置牀信息,並不能使用子查詢。 非常感謝您的合適解決方案。

好吧,我把我下面的期望的結果如下:

room_category room_name 
twin   tw2 
classic   cl1,cl2 
deluxe   dl1 

這意味着,按照患者詳細信息表室TW1仍被佔用,不應該在查詢結果中顯示。

+0

排放是1你ROOM_ID 1,因此其退還?你在期待什麼? – SMA

+0

我想從該房間的最後一個記錄中檢索房間。 – Pawan

+0

所以你應該檢查'出院是空'? – SMA

回答

1

由於查詢中的列與示例數據中的列不匹配,因此您的問題難以遵循。此外,你沒有預期的結果。

我認爲你需要的日期比較移入on條款,然後尋找不匹配的where

select rct.room_category AS room_category, 
     group_concat(rc.room_name separator ',') AS vacant_beds 
from room_charges rc join 
    room_category rct 
    on rc.room_category = rct.id left join 
    patient_detail pd 
    on rc.id = pd.room_name and 
     (pd. discharge_date_time is null or 
     curdate() between admission_date_time and discharge_date_time) 
where pd.id is null 
group by rc.room_category ; 
+0

Hi @Gordon Linoff - 我已經更新了所需結果的問題。再次在你的回答中你已經建議'curdate()在admission_date_time和discharge_date_time之間。因爲在患者出院之前,excluded_date_time將爲'00或null',所以我懷疑''之間的curdate()是否可以工作。 – Pawan