1

リスト内のユーザーのすべてのメッセージを一覧表示したい。すべてのメッセージを一覧表示できましたが、個別の送信者の一覧が必要です。Facebookのメッセージビューに似ています

メッセージテーブルにはこのレイアウトがあります

CREATE TABLE [dbo].[messages](
    [id] [bigint] IDENTITY(1,1) NOT NULL,
    [reciever] [varchar](50) NULL,
    [sender] [varchar](50) NULL,
    [posted] [datetime] NULL,
    [message] [varchar](1000) NULL,
    [status] [varchar](1) NULL
)

受信者と送信者はこのテーブルの外部キーです

CREATE TABLE [dbo].[accounts](
    [uname] [varchar](50) NOT NULL,
    [pword] [varchar](32) NULL,
    [fname] [varchar](50) NULL,
    [mname] [varchar](50) NULL,
    [lname] [varchar](50) NULL
)

このクエリを実行しようとしましたが、うまくいきません

SELECT [status], posted, sender, (
    SELECT DISTINCT sender FROM [messages] b
    WHERE a.sender = b.sender
) AS sender FROM [messages] a

目的は、すべてのメッセージを一覧表示することですが、送信者は個別または一意です。

前もって感謝します

4

3 に答える 3

1

やっとわかる!LOL WITHクエリブロック内に条件を追加するだけです

WITH latestMessages
AS
(
    SELECT  ID, receiver, sender, posted, message, status,
        ROW_NUMBER() OVER (Partition BY Sender
                                ORDER BY posted DESC) RN
    FROM    messages
    WHERE   receiver = 'admin'


)
SELECT  ID, receiver, sender, posted, message, status
FROM    latestMessages 
WHERE   RN = 1

これは、2 つの個別のクエリを実行するよりも、はるかにシンプルで迅速なアプローチです。

PS: これを解決済みとしてマークするにはどうすればよいですか?

于 2013-01-25T16:48:43.140 に答える
0

この問題を解決できました。私がしたことは、受信者のすべてのメッセージをリストすることでした

SELECT DISTINCT sender FROM messages WHERE receiver = 'someuser'

次に、受信者の最近のメッセージを取得します

SELECT TOP (1) message, posted FROM messages WHERE receiver = 'someuser' AND sender = 'anotheruser' ORDER BY posted DESC

私が使用しているプログラミング言語のいくつかの関数を使用してそれを行いました.NET.

于 2013-01-17T11:20:20.773 に答える
0
;WITH latestMessages
AS
(
    SELECT  ID, receiver, sender, posted, message, status,
            ROW_NUMBER() OVER (Partition BY Sender
                                ORDER BY posted DESC) RN
    FROM    messages
)
SELECT  ID, receiver, sender, posted, message, status
FROM    latestMessages 
WHERE   RN = 1
于 2013-01-15T03:39:02.917 に答える