存储过程,左连接给了我重复的行,但我希望每个具有相同ID的记录的前(1)行

时间:2014-06-20 14:12:21

标签: sql sql-server sql-server-2008

我有一个存储过程,

SELECT Top(1)
    TableA.*,
        TableB.*,
        someFunction(TableA.ID),
        coalesce(TableC.someColumn, -1) As SomeColumnExample
 FROM 
    TableA INNER JOIN TableB ON TableA.ID = TableB.IDA
    LEFT JOIN  TableC ON TableA.ID = TableC.IDA

Where TableA.ID = @ParaID
Order By TableC.DateTime Desc

现在我得到了结果,例如,

IDA   SomeColumn  DateAdded
1     100         2014-05-15 10:22:00
1     200         2014-05-10 12:00:00
2     300         2014-06-10 12:00:00
3     400         2014-07-10 12:00:00

我想要的(最新日期)

IDA   SomeColumn  DateAdded
1     200         2014-05-10 12:00:00
2     300         2014-06-10 12:00:00
3     400         2014-07-10 12:00:00

2 个答案:

答案 0 :(得分:1)

首先,我正在寻找一些不会给我带左连接的空列的东西,所以我用了,

coalesce(TableC.SomeColumn, -1) As SomeColumnHeHe

然后我遇到了一个问题,我只需从左连接中选择前1,所以我使用了OUTER APPLY,如下所示,

SELECT Top(1)
    TableA.*,
        TableB.*,
        someFunction(TableA.ID),
        coalesce(TableC.someColumn, -1) As SomeColumnExample,
        TempTable.IDA
 FROM 
    TableA INNER JOIN TableB ON TableA.ID = TableB.IDA
    OUTER APPLY
         (SELECT TOP(1) * FROM TableC where TableC.IDA = TableA.IDA Order By DateAdded Desc )  As TempTable

Where TableA.ID = @ParaID
Order By TableC.DateTime Desc

答案 1 :(得分:0)

你所描述的听起来不是左连接,而是内连接。为什么你说它必须左连接?

如果您只想在表C中有相应记录时想要记录,那么内部联接将完成

编辑:

你的问题似乎发生了重大变化......我真的不知道你现在要求的是什么。您的select语句不以任何方式表示样本数据。