2015-11-13 89 views
2

我试图构建一个查询,该查询将选择出租属性的所有租户。每个属性可以有多个租户,每个租户可以移动到不同的属性。只有ID匹配时才返回最大加入结果

这里的用户属性表的外观(部分),如:

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搬进财产33A 1日,然后于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  | [email protected] | Kevin  | Doe  | 2015-11-01 
226  | [email protected] | Tom   | Smith  | 2015-11-01 

但我只希望结果对用户226专门为物业ID 33A。最后,这...

User ID | Email  | First Name | Last Name | Occupant Date 
--------------------------------------------------------------------- 
226  | [email protected] | Tom   | Smith  | 2015-11-01 

这是可能做一个查询,或者我需要做几个?我很感激这方面的帮助!获取当前租户给定属性

+0

表示您需要--->'226 | 33A | 2015-11-01 | NULL'?只有 –

+0

如果共享输出表,它会很好。 –

+0

你的表中是否有任何ID列(自动递增)? –

回答

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

查找用户(S)与最近的举动日期=属性最近日期的举动。

+0

谢谢!这让我走上了正轨。我不得不修改一点,但是就是这样。这里的礼仪是什么?我是否将我完成的答案张贴在某个地方? –