我正在尝试构建一个将选择租赁房产的所有租户的查询。每个属性可以有多个租户,每个租户可以移动到不同的属性。
以下是用户属性表的内容(部分):
User ID | Property ID | Move In Date | Move Out Date
----------------------------------------------------------
224 | 33A | 2015-11-01 | NULL
224 | 36B | 2015-11-15 | NULL
226 | 33A | 2015-11-01 | NULL
在上面的示例中,User 224
在1日移至属性33A
,然后在15日移至属性36B
。对于此问题和示例,我假设move_out_date
列没有正确填充日期。在这种情况下,我需要一个可以绕过该问题的查询。
到目前为止,这是我的查询内容:
SELECT
u.user_email, p.user_fname, p.user_lname, r.move_in_date AS occupant_date
FROM
user u
LEFT JOIN
user_profile p ON p.user_id = u.user_id
LEFT JOIN
(
SELECT
user_id, property_id, move_in_date
FROM
user_property
WHERE
move_out_date IS NULL
ORDER BY
move_in_date DESC
) r ON r.user_id = u.user_id
WHERE
r.property_id = '33A'
GROUP BY
u.user_id
ORDER BY
r.move_in_date ASC, p.user_fname ASC
此查询返回每个占用者信息,并在日期中移动。对于属性33A
,它返回的是用户224
和226
,但我只想返回用户226
,因为从技术上讲,用户224
已从该属性移出。
目前输出表如下所示:
User ID | Property ID | Move In Date | Move Out Date
----------------------------------------------------------
224 | 33A | 2015-11-01 | NULL
226 | 33A | 2015-11-01 | NULL
User ID | Email | First Name | Last Name | Occupant Date
---------------------------------------------------------------------
224 | user1@e.com | Kevin | Doe | 2015-11-01
226 | user2@e.com | Tom | Smith | 2015-11-01
但我只希望用户226
的结果专门针对属性ID 33A
。最终,这...
User ID | Email | First Name | Last Name | Occupant Date
---------------------------------------------------------------------
226 | user2@e.com | Tom | Smith | 2015-11-01
这可以在一个查询中完成,还是我需要制作一些?我很感激你的帮助!
答案 0 :(得分:2)
获取特定房产的当前房客的一种方法:
select p.user_id, p.property_id, p.move_in_date from
user_property p
join (
-- Get users most recent move in date.
select max(move_in_date) move_in_date, user_id
from user_property
group by user_id
) u_move_in on (p.user_id = u_move_in.user_id and p.move_in_date = u_move_in.move_in_date)
join (
-- Get the property's most recent move in date.
select max(move_in_date) move_in_date, property_id
from user_property
where property_id = '33A'
group by property_id
) p_move_in on (p.property_id = p_move_in.property_id and p.move_in_date = p_move_in.move_in_date);
找到日期最近移动的用户=属性最近移动日期。