我有一个具有这种结构的数据集:
ContractNumber | MonthlyPayment |持续时间| StartDate |结束日期
一个合同号可以多次出现,因为该数据集是具有相同结构的不同报告的合并。
现在我想过滤/查找MonthlyPayment和/或Duration和/或StartDate和/或EndDate 不同的合约号码。
示例(请注意,合同号不是主键):
ContractNumber | MonthlyPayment | Duration | StartDate | EndDate
001 | 500 | 12 | 01.01.2015 | 31.12.2015
001 | 500 | 12 | 01.01.2015 | 31.12.2015
001 | 500 | 12 | 01.01.2015 | 31.12.2015
002 | 1500 | 24 | 01.01.2014 | 31.12.2017
002 | 1500 | 24 | 01.01.2014 | 31.12.2017
002 | 1500 | 24 | 01.01.2014 | 31.12.2018
使用此示例数据集,我需要使用特定查询检索002。 001是相同的,不会改变,但002随时间而变化。
除了编写在Excel上运行的VBA脚本之外,我对如何使用SQL解决这个问题没有任何可靠的想法
我的第一个想法是使用分组的SQL方法,其中相同的值组合在一起,但不是不同的值。我目前正在试验这个。我目前的尝试是:
1。)有通常的表格
2。)使用以下结构创建第二个表/查询:
ContractNumber | AVG(MonthlyPayment)| AVG(持续时间)| AVG(StartDate)| AVG(结束日期)
我使用分组创建的。
E.G。
表1。)
ContractNumber | MonthlyPayment
1 | 10
1 | 10
1 | 20
2 | 300
2 | 300
2 | 300
表2.)
ContractNumber | AVG(MonthlyPayment)
1 | 13.3
2 | 300
3)现在我想找到明确的合同号 - 在这个例子中只有MonthlyPayment - 不等于平均值(它应该是相同的 - 否则我们有一个我需要找到的变体)。
你知道我怎么解决这个问题吗?否则我会开始编写VBA或Python脚本。我有CSV数据集,所以现在我也可以使用MySQL,Power Bi或Excel。
我需要执行一次此分析,因此我不需要完整的方法,因此查询可以分成不同的步骤。
非常感谢!非常感谢你。
答案 0 :(得分:1)
要查找具有差异的所有合同号,请使用:
select ContractNumber
from
(
select distinct ContractNumber, MonthlyPayment , Duration , StartDate , EndDate
from MyTable
) x
group by ContractNumber
having count(*) >1