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

謝謝!這讓我走上了正軌。我不得不修改一點,但是就是這樣。這裏的禮儀是什麼?我是否將我完成的答案張貼在某個地方? –

相關問題