首页 文章

SQLite在一个表中使用MAX列查询多个表

提问于
浏览
1

我是SQLite的新手,我在使用多个表进行查询时遇到问题 .

Table1

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

Table2

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

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

所以结果应该是

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)

2 回答

  • 0

    您可以在Table2上使用 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

  • 1

    使用 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"
    

相关问题