【发布时间】:2017-04-06 09:50:12
【问题描述】:
我正在努力寻找更好的解决方案来从我的用户呼叫数据表中选择唯一记录。 我的表结构如下:
SELECT [MarketName],
[WebsiteName] ,
[ID] ,
[UserID],
[CreationDate],
[CallDuration],
[FromPhone] ,
[ToPhone],
[IsAnswered],
[Source]
FROM [dbo].[UserCallData]
此表中有多个具有不同且相同 ID 的条目。我想检查 [FromPhone] 和 [ToPhone] 在过去 3 个月内是否存在多次,如果是,我想根据 [CreationDate] 选择所有列的第一条记录,将出现次数计为 TotalCallCount 并求和 totalCallDuration作为一个单一的记录。如果 [FromPhone] 和 [ToPhone] 没有多次出现,我想选择所有列。我已经能够提出如下部分查询。但这不会返回所有列而不包含在 group by 子句中,而且它也不满足我的整个标准。对此的任何帮助将不胜感激。
select [FromPhone],
MIN([CreationDate]),
[ToPhone],
marketname,
count(*) as TotalCallCount ,
sum(CallDuration) as TotalCallDuration
from [dbo].[UserCallData]
where [CreationDate] >= DATEADD(MONTH, -3, GETDATE())
group by [FromPhone],[ToPhone], marketname
having count([FromPhone]) > 1 and count([ToPhone]) >1
【问题讨论】:
-
我们显然无法理解您的请求。您能否给我们:(a) UserCallData 表的“创建表”脚本,(b) 一些示例数据(如有必要,匿名),以及 (c) 使用该示例数据作为输入时的预期输出。数据应包含说明您希望如何处理所有案例的行(因此,至少,有些在过去三个月内,有些则不是)。
标签: sql sql-server