1

メッセージ送信用の Web アプリケーションを開発しています。次の列があります: TO,MSG,DATE,FROM. 基準日の最大メッセージ送信者をカウントしたい。では、ここで SQL クエリは何であるべきでしょうか?

4

2 に答える 2

0

これを試してみてください。これがあなたの期待どおりであることを願っています。

DECLARE @Temp AS TABLE ([TO] varchar(20),MSG varchar(50),[Date] DATETIME,[From] varchar(50))
INSERT INTO @Temp VALUES
                  ('Person1','Msg',GETDATE(),'Sender1'),
                  ('Person2','Msg',GETDATE(),'Sender1'),
                  ('Person2','Msg',GETDATE()-1,'Sender1'),
                  ('Person3','Msg',GETDATE(),'Sender1'),
                  ('Person4','Msg',GETDATE()-1,'Sender1'),
                  ('Person5','Msg',GETDATE()-2,'Sender1'),
                  ('Person6','Msg',GETDATE(),'Sender1'),
                  ('Person3','Msg',GETDATE()-1,'Sender1'),
                  ('Person2','Msg',GETDATE(),'Sender1'),
                  ('Person1','Msg',GETDATE(),'Sender2'),
                  ('Person2','Msg',GETDATE(),'Sender2'),
                  ('Person2','Msg',GETDATE()-1,'Sender2'),
                  ('Person3','Msg',GETDATE(),'Sender3'),
                  ('Person4','Msg',GETDATE()-1,'Sender3'),
                  ('Person5','Msg',GETDATE()-2,'Sender3'),
                  ('Person6','Msg',GETDATE(),'Sender3'),
                  ('Person3','Msg',GETDATE()-5,'Sender2'),
                  ('Person2','Msg',GETDATE()-4,'Sender2')
SELECT
    [Date]
    ,[SentCount]
    ,[From]
FROM

    select
        RANK() OVER(PARTITION BY CONVERT(varchar(10),[DATE],103) ORDER BY COUNT([From]) DESC) AS [RANK],
        [From],
        COUNT([From]) AS [SentCount],
        CONVERT(varchar(10),[DATE],103) AS [Date]
    FROM 
        @Temp 
    GROUP BY [From],CONVERT(varchar(10),[DATE],103) 
) A
WHERE
    [Rank]=1
于 2013-05-23T08:47:28.650 に答える