【发布时间】:2022-01-24 15:26:49
【问题描述】:
我的目标是找到通话时间最长的人,显示通话时间、电话号码和人名、姓氏。
所有事情都必须在一个查询中完成。
我不明白如何处理的部分是,我可以通过 SubscriberID 找到最长的呼叫,但我无法准确显示它是哪个电话号码,因为如果我执行 max() 并将 SubscriberID 分组AdresseeNumber,我收到所有号码和所有电话。
我有三张桌子。
NetworkP2P、订阅者和个人。
NetworkP2P 以如下数据为例:
NetworkP2P
SubscriberID | ServiceID | AddresseeNumber | CallStart | CallEnd
1 1 613-555-0160 2014-08-02 08:30:24.000 2014-08-02 08:45:23.000
1 2 614-545-0130 2014-08-02 08:30:24.000 2014-08-02 08:30:24.000
1 2 653-535-0120 2014-08-02 08:30:24.000 2014-08-02 08:30:24.000
2 2 653-563-0312 2014-08-02 08:30:24.000 2014-08-02 08:30:24.000
2 2 613-645-0160 2014-08-02 08:30:24.000 2014-08-02 08:45:24.000
3 2 613-812-0160 2014-08-02 08:30:24.000 2014-08-02 08:45:24.000
3 2 613-958-0160 2014-08-02 08:30:24.000 2014-08-02 08:45:24.000
4 1 613-492-0160 2014-08-02 08:30:24.000 2014-08-02 08:45:24.000
Subscriber
SubscriberID | PersonID
1 1
2 1
3 2
4 3
Person
PersonID | Name | LastName
1 John Michael
2 Adam Savage
3 George Good
此查询将显示所有呼叫并按所有呼叫的最大值排序。我将如何首先将电话号码添加到已选择的电话号码中?此外,在那之后,如何通过姓名和姓氏指定订阅者 ID?
SELECT P2P.SubscriberID , max(DATEDIFF(minute, CallStart, CallEnd)) as 'TimeCall'
FROM dbo.NetworkP2P AS P2P
WHERE ServiceID IN(1,2)
GROUP BY p2p.SubscriberID
ORDER BY P2P.SubscriberID ASC
【问题讨论】:
-
“我无法显示具体是哪个电话号码” 这是否回答了您的问题Get top 1 row of each group
-
不幸的是,我没有发现它对我的问题有什么帮助。
-
提问时,您需要提供minimal reproducible example: (1) DDL 和样本数据填充,即 CREATE 表和 INSERT T-SQL 语句。 (2) 你需要做什么,即逻辑和你的代码尝试在 T-SQL 中实现它。 (3) 期望的输出,基于上述#1 中的样本数据。 (4) 您的 SQL Server 版本 (SELECT @@version;)。全部在问题内,没有图片。
标签: sql sql-server tsql