如何获得最新日期的行,其中我的日期在另一个表中

时间:2016-10-13 06:27:12

标签: sql-server tsql

我的桌子:

LoanItemCode    Quantity    ItemDesc    ItemWeight  Karat   
JAR002                 1     Ring           1.60    18      
JAR003                 6     dh             7.00    18

ContractID  EffectiveDate
    60       2016-10-12
    61       2016-10-12
    62       2016-10-13
    63       2016-10-13

我想看到这个输出:

LoanItemCode    Quantity    ItemDesc    ItemWeight  Karat   EffectiveDate
JAR002              1          Ring        1.60       18      2016-10-12
JAR003              6           dh         7.00       18      2016-10-13

我尝试了什么:

SELECT  LoanItemCode ,Quantity, ItemDesc, ItemWeight, ISNULL(ItemKarat,0) as 'Karat', MAX(EffectiveDate) 
FROM tblLoanContract 
    LEFT JOIN tblLoanItemDetails 
        LEFT JOIN tblLoanItem 
            LEFT JOIN tblItemType 
            ON tblLoanItem.ItemTypeID = tblItemType.ItemTypeID 
        ON tblLoanItemDetails.LoanItemID = tblLoanItem.LoanItemID 
    ON tblLoanContract.ContractID = tblLoanItemDetails.LoanContractID 
WHERE ItemStatusID = 5
-My code

1 个答案:

答案 0 :(得分:0)

看起来你有3个问题。

  1. 您的联接语法不正确。联接的ON部分必须与JOIN部分保持一致。

  2. 您在不使用分组的情况下在多个字段之一上使用聚合。使用max()之类的聚合函数后,所有其他字段也必须使用聚合(例如min()sum())或包含在GROUP BY子句中。

  3. 您尚未在生效日期添加别名。 Max()会生成一个未命名的列。

  4. 另一个建议是在联接中使用表别名。我发现它使连接语法更加清晰,并且当有多个连接表时,也更容易理解来自哪些表字段。

    这有用吗?如果没有,您将不得不提供有关其他2个表的更多详细信息。

    SELECT  lid.LoanItemCode, lid.Quantity, lid.ItemDesc, lid.ItemWeight,
        ISNULL(lid.ItemKarat,0) as 'Karat', MAX(lc.EffectiveDate) EffectiveDate
    FROM tblLoanContract lc
        LEFT JOIN tblLoanItemDetails lid
            ON lc.ContractID = lid.LoanContractID 
        LEFT JOIN tblLoanItem li
            ON lid.LoanItemID = li.LoanItemID 
        LEFT JOIN tblItemType it
            ON li.ItemTypeID = it.ItemTypeID 
    WHERE ItemStatusID = 5    --I'm not sure what table this comes from so no table alias here
    GROUP BY lid.LoanItemCode, lid.Quantity, lid.ItemDesc, lid.ItemWeight,
        ISNULL(lid.ItemKarat,0)
    ORDER BY lid.LoanItemCode;