当前位置: 首页 > 面试题库 >

带计数的SQL连续记录

梁丘俊人
2023-03-14
问题内容

表名称调用

Field 1 - Phone_number
Field 2 - System_outcome

Phone_number      System_outcome  DateTime
--------------------------------------------------
07777778999       Answered        18-12-2016 17:15
07777778123       No Answer       18-12-2016 18:10
07777778999       No Answer       19-12-2016 19:30
07777778999       No Answer       19-12-2016 12:15
07777778999       No Answer       19-12-2016 13:15
07777778999       No Answer       20-12-2016 11:15
07777778124       No Answer       20-12-2016 9:15
07777778128       Answered        20-12-2016 17:15
07777778074       Answered        20-12-2016 17:15

上面是一个示例,我需要找出的是如何找到连续无应答计数大于6的数字?

目前,我已经能够获得以下信息,但它不是连续的。

SELECT phone_number,system_outcome,Datetime
FROM calls
WHERE DATE (datetime) BETWEEN '2016-12-23' AND '2016-12-31'
AND system_outcome = 'NO_ANSWER'
GROUP BY phone_number
HAVING count(Phone_number) > 6

问题答案:

您可以使用变量来执行此操作。

select phone_number from (
select c.*,
@prev_outcome:=@cur_outcome,
@cur_outcome:=system_outcome,
@prev_pnum:=@cur_pnum,
@cur_pnum:=phone_number,
case when @cur_pnum = @prev_pnum and @prev_outcome <> @cur_outcome then @rn:=@rn+1
     when @cur_pnum = @prev_pnum and @prev_outcome = @cur_outcome then @rn:=@rn
else @rn:=1 end as rank
from calls c, 
(select @rn:=0,@prev_pnum:='',@cur_pnum:='',@prev_outcome:='',@cur_outcome:='') r
order by phone_number,dt
    ) x
where system_outcome='No Answer'
group by phone_number,rank
having count(*) > 6

该查询使用4个变量

1)@cur_outcome,它最初设置为空字符串。此后,选择将分配当前行的system_outcome。

2)@prev_outcome,最初设置为空字符串。此后,选择将其设置为@cur_outcome(这是第一次为空字符串,依此类推)。

3)@cur_pnum最初设置为空字符串。此后,选择将分配当前行的phone_number。

4)@prev_pnum,最初设置为空字符串。此后,选择将其设置为@cur_pnum值(最初为空字符串)。

order by 子句在这里很重要,以便根据phone_number和date指定当前行和先前行。

最初运行内部查询以查看变量的设置方式,这将为您澄清情况。

Sample Demo

该演示包含的一些示例数据比问题中显示的要多。



 类似资料:
  • 问题内容: 我希望为每个人计算连续的一天咒语。 我的表: 这是我目前拥有的代码: 产生结果: 在我正在寻找这样的结果集的地方: 我需要计算连续1天以上的连续天数。然后将其作为某人拥有多少个连续咒语的总和。例如,弗雷德在这段时间内连续2次生病。如果某人有星期五和星期一休息,我也需要此内容,这应该算作一个连续的咒语。 我对如何到达那里有些迷失。任何帮助将不胜感激。 请参阅:http ://sqlfid

  • 问题H[最长自然后继数]如果第二个是自然数序列中第一个的后继数(1和2是自然后继数),则两个连续的整数是自然后继数。编写一个程序,读取一个数字N,后跟N个整数,然后打印连续自然后继的最长序列的长度。示例: 输入 7 2 3 5 6 7 9 10输出3这里是我的代码到目前为止有人能帮我吗

  • 问题内容: 有没有一种方法可以获取表示行中NULL字段数的列?这将在SELECT语句中。 例如: 更新:我想要此查询,以便我可以基于给定书的有多少会员销售进行排序。因此,无论哪个会员,拥有3个会员的排名都会比拥有2个会员的排名高。我的数据库中大约有七个会员,并且会不断增长。因此,任何要求指定每个会员字段的查询都可能太长 桌子: Affiliates_Cache- 主键是Affiliate_ISBN

  • 我被困在一个问题上,希望得到一些指导。我们希望生成一个报告,计算产品的连续日期(从用户提供的日期向后看)。数据集如下: 因此,我们想得出一份报告,该报告在2021年3月2日提供的日期如下所示: 尽管我正在努力编写查询,但我甚至不知道该怎么称呼它,因为我需要一个特定阈值上的连续值计数。我可以计算阈值以上的值,但不确定如何添加“连续数周”逻辑。

  • 问题内容: 我已经搜索了此内容,但是所有类似的问题和答案都完全不同,无法正常工作。 我有一个包含以下字段的表格:人,事物,purdate。当某人购买每件新东西时,将输入一条新记录。 我想计算一个人连续购买了“事物”(thing01或thing02,没有关系)的月份。如果连续的休息日休息,则应重新开始计数。 封闭数据后,我想得出以下结论: 我知道我可以得到一个不同的人员列表,extract(purd

  • 问题内容: 我有一个表“ lijsten”,一个表“ werknemerlijsten”和一个表“ categorieen”。 现在我正在使用查询来获取计数 但是,当我尝试使用另一个表的另一个计数进行相同的查询时,结果为假。 任何想法我可能做错了吗?谢谢 问题答案: 您的引入了具有给定ID多个匹配项的表。固定计数的快速简便方法是使用而不是: 另一种方法是在联接之前聚合表,并在子查询中进行计数。