1
我怎麼會SQLite中構建一個查詢,從TABLE1
選擇每行返回最大的價值,同時也從一個TABLE2
選擇一排,其中:內部聯接兩個表,並從第二個表中的第一個表中的每個條目
- 有從
TABLE1
一個id
值之間的匹配,以及; - 如果
TABLE2
中有多個id
匹配項,則只返回另一個DATE
列中的最高值。
下面是表的安排我現在所擁有的。在r_identifier
列中的值對應於t_id
值TABLE1
:
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 |
+------+--------------+--------+---------+
這裏是我想從我的查詢返回的表。因爲有與1
的r_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));
可以增加限值按照您的要求,它將返回多個值...!作爲限制2或更多 – Shailesh