1

我是 SQLite 的新手,在获取包含多个表的查询以正常工作时遇到问题。

表格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    7890123

我希望查询基于 MAX(ChangeNumber)... 以及表 1 中的所有匹配行仅返回表 2 中的一行数据。

所以结果应该是

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

我似乎无法获得上述格式的查询结果。我使用了 JOIN 和 SUB SELECTS 但似乎没有任何工作正常。

查询应包含以下条件。

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

2 回答 2

1

您可以WHERE NOT EXISTS在 Table2 上使用 a 来仅获取最大行:

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 演示

于 2013-10-21T02:35:18.750 回答
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"
于 2013-10-21T02:44:38.113 回答