代码之家  ›  专栏  ›  技术社区  ›  Adrian Godong

T-SQL连接受限

  •  4
  • Adrian Godong  · 技术社区  · 17 年前

    ID (PK), Value1
    

    BatchID, Table1ID (FK to Table 1 ID), Value2
    

    表1:

    ID  Value1
    1   A
    2   B
    

    表2:

    BatchID  Table1ID  Value2
    1        1         100
    2        1         101
    3        1         102
    1        2         200
    2        2         201
    

    现在,对于表1中的每条记录,我想在表2中做一个匹配记录,但只匹配最近的一条(批ID是连续的)。上述示例的结果为:

    Table1.ID  Table1.Value1  Table2.Value2
    1          A              102
    2          B              201
    

    LIMITing an SQL JOIN

    4 回复  |  直到 9 年前
        1
  •  10
  •   Cade Roux    17 年前
    WITH Latest AS (
        SELECT Table1ID
            ,MAX(BatchID) AS BatchID
        FROM Table2
        GROUP BY Table1ID
    )
    SELECT *
    FROM Table1
    INNER JOIN Latest
        ON Latest.Table1ID = Table1.ID
    INNER JOIN Table2
        ON Table2.BatchID = Latest.BatchID
    
        2
  •  3
  •   Quassnoi    17 年前
    SELECT  id, value1, value2
    FROM    (
            SELECT  t1.id, t2.value1, t2.value2, ROW_NUMBER() OVER (PARTITION BY t1.id ORDER BY t2.BatchID DESC) AS rn
            FROM    table1 t1
            JOIN    table2 t2
            ON      t2.table1id = t1.id
            ) q
    WHERE   rn = 1
    
        3
  •  0
  •   SQLMenace    17 年前

    select t1.*,t2.Value2
    from(
    select Table1ID,max(Value2) as Value2
    from [Table 2]
    group by Table1ID) t2
    join [Table 1] t1 on t2.Table1ID = t1.id
    
        4
  •  -1
  •   instanceof me    17 年前

    SELECT * FROM Table1 a
    INNER JOIN Table2 b ON (a.id = b.Table1ID)
    WHERE NOT EXISTS(
          SELECT 1 FROM Table2 c WHERE c.Table1ID = a.id AND c.BatchID > b. BatchID
    )