2016-11-06 65 views
1

我怎麼會SQLite中構建一個查詢,從TABLE1選擇每行返回最大的價值,同時也從一個TABLE2選擇一排,其中:內部聯接兩個表,並從第二個表中的第一個表中的每個條目

  • 有從TABLE1一個id值之間的匹配,以及;
  • 如果TABLE2中有多個id匹配項,則只返回另一個DATE列中的最高值。

下面是表的安排我現在所擁有的。在r_identifier列中的值對應於t_idTABLE1

TABLE1( 「坦克」)

+------+--------------+-------+ 
| t_id | t_name | t_vol | 
+------+--------------+-------+ 
| 1 | A Tank  | 23 | 
| 2 | Another Tank | 48 | 
+------+--------------+-------+ 

TABLE2( 「讀經」)

+------+--------------+--------+---------+ 
| r_id | r_identifier | r_date | r_value | 
+------+--------------+--------+---------+ 
| 0 |   1 | 5000 |  5 | 
| 1 |   1 | 6000 |  7 | 
| 2 |   2 | 7000 |  4 | 
| 3 |   1 | 8000 |  3 | 
+------+--------------+--------+---------+ 

這裏是我想從我的查詢返回的表。因爲有與1r_identifier多個條目,只返回一個與r_date最高值:

+------+--------------+-------+------+--------------+--------+---------+ 
| t_id | t_name | t_vol | r_id | r_identifier | r_date | r_value | 
+------+--------------+-------+------+--------------+--------+---------+ 
| 1 | A Tank  | 23 | 3 |   1 | 8000 |  5 | 
| 2 | Another Tank | 48 | 2 |   2 | 7000 |  4 | 
+------+--------------+-------+------+--------------+--------+---------+ 

我已經能夠到目前爲止,管理最接近的是與下面的語句,通過this answer啓發:

SELECT t.*, r.* FROM t INNER JOIN r ON t._id=r_identifier ORDER BY r_date DESC LIMIT 1 

這將返回正確的值,但只返回一個「tank」 - 表中的第一個值。

編輯 我忘了我,我想找回TABLE1即使有在TABLE2沒有條目曾在r_identifier列中的匹配值原來的問題就更不用說了。使用Gordon Linoff's answer爲指導,雖然我能想出這是運作良好的情況如下:

SELECT t.*, r.* 
FROM t LEFT OUTER JOIN 
r ON t._id=r_identifier 
WHERE 
    (r_date IS NULL) OR 
    (r_date=(SELECT MAX(r2.r_date) 
    FROM r r2 
    WHERE r.r_identifier=r2.r_identifier)); 
+0

可以增加限值按照您的要求,它將返回多個值...!作爲限制2或更多 – Shailesh

回答

1

一種方法是使用一個WHERE子句相關子查詢,以獲得最大日期:

SELECT t.*, r.* 
FROM t INNER JOIN 
    r 
    ON t._id = r.r_identifier 
WHERE r.r_date = (SELECT MAX(r2.r_date) 
        FROM r r2 
        WHERE r.r_identifier = r2.r_identifier 
       ); 
相關問題