我正在开发一个用于发送消息的 Web 应用程序。我有以下列:TO,MSG,DATE,FROM
。我想在基准日期计算最大的 msg 发件人。那么这里的sql查询应该是什么?
问问题
79 次
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 回答