仅当ID与

时间:2015-11-13 16:51:31

标签: mysql

我正在尝试构建一个将选择租赁房产的所有租户的查询。每个属性可以有多个租户,每个租户可以移动到不同的属性。

以下是用户属性表的内容(部分):

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,它返回的是用户224226,但我只想返回用户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

这可以在一个查询中完成,还是我需要制作一些?我很感激你的帮助!

1 个答案:

答案 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);

找到日期最近移动的用户=属性最近移动日期。