【发布时间】:2017-11-27 16:19:52
【问题描述】:
我有一张这样的表格,其中包含不同投诉的信息
telephone motive complaint_id complaint_date
980761524 motive1 R1234561 23/05/2017
980761524 motive1 R1234562 23/05/2017
980761524 motive1 R1234563 25/08/2017
980761524 motive1 R1234564 26/09/2017
980761524 motive1 R1234565 10/10/2017
980761524 motive1 R1234566 30/12/2017
991761525 motive2 R4454222 24/06/2017
991761525 motive2 R4454223 29/06/2017
991761525 motive2 R4454224 30/10/2017
940789563 motive3 R8993271 24/06/2017
940789563 motive3 R8993272 29/06/2017
940789563 motive3 R8993273 30/10/2017
我需要编写一个查询 (oracle-sql),用 repeat_flag(new column) 标记具有相同电话的投诉,相同的动机,min(complaint_date) 为 0 但这个最小值(complaint_date) 每 2 个月更改一次。
让我详细解释一下。
假设我正在分析第一组电话/动机,即
telephone motive complaint_id complaint_date
980761524 motive1 R1234561 23/05/2017
980761524 motive1 R1234562 23/05/2017
980761524 motive1 R1234563 25/08/2017
980761524 motive1 R1234564 26/09/2017
980761524 motive1 R1234565 10/10/2017
980761524 motive1 R1234566 30/12/2017
这个组的最小(投诉日期)是23/05/2017,这里有2行相同的日期。所以只留下一个,我去commitment_id列查看生成的第一个投诉。所有投诉_id 均为R+Number,最低编号为第一次投诉(R1234561)并将其标记为0。因此,如果下一行的日期是第一个 min(complaint_date) 内的 2 个月,我将其标记为 1。
如果下一个投诉日期在两个月内,则您有重复投诉并将其标记为 1。在此示例中,23/05/2017 在范围内,因此我将其标记为 1。
如果下一个投诉日期不在两个月内,则不是重复,您将其标记为“0”。现在,这里的投诉日期是 25/08/2017,现在是新的 min(complaint_date)
下一行,这里我得到了26/09/2017,这是在 2 个月内25/08/2017,所以这是重复的,我将其标记为 1。
下一行,这里我得到了10/10/2017,这是在 2 个月内25/08/2017,所以这是重复的,我将其标记为 1。
最后,我得到了30/12/2017,它不在两个月内25/08/2017,所以这不再重复,我将其标记为。现在这是新的 min(complaint_date)
其他行也一样。
最终的结果应该是这样的
telephone motive complaint complaint_date 2months_repeat_flag
980761524 motive1 R1234561 23/05/2017 0
980761524 motive1 R1234562 23/05/2017 1
980761524 motive1 R1234563 25/08/2017 0
980761524 motive1 R1234563 26/09/2017 1
980761524 motive1 R1234563 10/10/2017 1
980761524 motive1 R1234563 30/12/2017 0
决赛桌应该是这个样子
telephone motive complaint complaint_date 2months_repeat_flag
980761524 motive1 R1234561 23/05/2017 0
980761524 motive1 R1234562 23/05/2017 1
980761524 motive1 R1234563 25/08/2017 0
980761524 motive1 R1234564 26/09/2017 1
980761524 motive1 R1234565 10/10/2017 1
980761524 motive1 R1234566 30/12/2017 0
991761525 motive2 R4454222 24/06/2017 0
991761525 motive2 R4454223 29/06/2017 1
991761525 motive2 R4454224 30/10/2017 0
940789563 motive3 R8993271 24/06/2017 0
940789563 motive3 R8993272 29/06/2017 1
940789563 motive3 R8993273 30/10/2017 0
我的桌子上有大约 2 到 30 起投诉,使用相同的电话和相同的动机。
是否可以仅使用 SQL?欢迎任何存储过程。但我更喜欢只使用 SQL 来执行此操作,因为我的用户无权创建 sp。
【问题讨论】:
-
您好!欢迎来到堆栈溢出!您能否提供一些示例数据?很高兴在这里看到对您的问题的解释以及您需要什么,但还提供示例插入语句非常有帮助,以便其他人可以轻松地重新创建一些虚拟数据以使用。