2013-10-21 67 views
1

我是SQLite的新手,並且遇到了一個問題,需要多個表才能正常工作。SQLite查詢在一個表中使用MAX列的多個表格

表1

MessageNum Regression  RegressionNum 
=========== ==========  ============= 
1234567890 true   12340000 
1234567890 true   23450000 
1234567890 true   34560000 

表2

MessageNumber Data  ChangeNumber  
============= ====  ========= 
1234567890  text2 1234567 
1234567890  text8 2345678 
1234567890  text9 3456789 
1234567890  text4 4567890 
1234567890  text5 5678901 
1234567890  text3 6789012 
1234567890  text1 789

我想查詢返回只有一行數據的基礎上MAX(的changenumber)表2和...來自表1的所有匹配行。

所以結果應該是

MessageNum Regression  RegressionNum Data  ChangeNumber 
=========== ==========  ============= ====  ============ 
1234567890 true   12340000   text1 789
1234567890 true   23450000   text1 789
1234567890 true   34560000   text1 789

我似乎無法得到上面列出的格式的查詢結果。我已經使用JOIN和SUB SElECTS,但似乎沒有任何工作正常。

查詢應該包含以下條件。

table1.MessageNum=1234567890 AND table1.Regression="true" AND MAX(table2.ChangeNumber) 

回答

1

您可以使用表2一WHERE NOT EXISTS只得到最大行:

SELECT t1.MessageNum, t1.Regression, t1.RegressionNum, t2.Data, t2.ChangeNumber 
FROM Table1 t1 
INNER JOIN Table2 t2 ON t1.MessageNum = t2.MessageNumber 
WHERE NOT EXISTS (
    SELECT 1 
    FROM Table2 t2a 
    WHERE t2a.MessageNumber = t2.MessageNumber 
    AND t2a.ChangeNumber > t2.ChangeNumber 
) 
AND t1.MessageNum = 1234567890 
AND t1.Regression = "true" 

SQL Fiddle demo

+0

這個作品完美。謝謝 – user2901528

0

使用MAX聚合函數,試試這個:

SELECT T2.MessageNumber, T1.Regression, T1.RegressionNum, T2.Data, T2.ChangeNumberMax 
FROM (SELECT MessageNumber, MAX(ChangeNumber) as ChangeNumberMax, Data 
FROM Table2 
GROUP BY MessageNumber) T2 
INNER JOIN Table1 T1 
ON T2.MessageNumber=T1.MessageNum 
WHERE T1.MessageNum=1234567890 AND T1.Regression="true" 
+0

「數據」既不是聚合也不是GROUP BY表達式 –

+0

@lc。我明白(而且很清楚這一點),但它在sqlite中起作用。檢查我的[sqlfiddle](http://www.sqlfiddle.com/#!7/4e842/2)。我甚至在這裏使用你自己的例子。如果你是那個低估我的人,如果你發現它是基於我的鏈接工作的話,請扭轉它。 – Edper

+0

@lc。這是一個[SQLite擴展](http://www.sqlite.org/releaselog/3_7_11.html)。 –