2

私はこのクエリを持っています:

SELECT 
    [Address]=e.Address, 
    [LastEmail] = 
    (
        SELECT TOP 1 [Email] 
        FROM Email innerE 
        WHERE e.UserID = innerE.UserID 
        AND innerE.Contact = @emailId
        AND (IsSent is null OR isSent = 0)
        ORDER BY Timestamp DESC
    )

FROM Emails e

これは問題なく機能しますが、今、私はそのlastemail列を含む行全体を取得したいのですが、これが可能であれば、それをどのように行うことができるかについてのアイデアはありますか?

4

2 に答える 2

1

あなたはこれを行うことができます:

;WITH LastEmails
AS
(
   SELECT *, 
     ROW_NUMBER() OVER(ORDER BY Timestamp DESC) rownum
   FROM Emails
   WHERE Contact = @emailId
     AND (IsSent is null OR isSent = 0)
)
SELECT * FROM LastEmails
WHERE rownum = 1;
于 2012-12-11T11:53:16.717 に答える
0

あなたのDBMSがそれをサポートしているなら、あなたはAPPLYを使うことができます(それはSQL-Server構文のように見えるので私はそれがそうすると思います)

SELECT  [Address]=e.Address, 
        [LastEmail] = ie.Email
FROM    Emails e
        OUTER APPLY
        (   SELECT  TOP 1 *
            FROM    Email innerE 
            WHERE   e.UserID = innerE.UserID 
            AND     innerE.Contact = @emailId
            AND     (IsSent is null OR isSent = 0)
            ORDER BY Timestamp DESC
        ) ie

これは相関サブクエリと同様に機能しますが、複数の行と複数の列を許可します。

于 2012-12-11T12:09:17.700 に答える