1

我正在开发一个用于发送消息的 Web 应用程序。我有以下列:TO,MSG,DATE,FROM。我想在基准日期计算最大的 msg 发件人。那么这里的sql查询应该是什么?

4

2 回答 2

0

Select top 1 form ,Date, count(1) MsgCount From group by form ,Date order by 3 desc

如果您删除前 1 个,这将返回 1 行,其中包含最大的 msg 发件人详细信息,您将按 msg 发送的顺序获得所有用户 :)

于 2013-05-23T07:38:09.163 回答
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 回答