2017-06-06 35 views
0

我有一个具有此结构的数据集:检测数据集中的变化

订单号|每月付款|持续时间| 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

你铸造一个很宽的净那里。 –

+0

参见:[?我为什么要提供什么,在我看来是一个非常简单的SQL查询的MCVE(https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve -for - 什么 - 似乎对我将要-A-极简单的SQL查询) – Strawberry

回答

1

要找到差异的所有合同号码,使用:

select ContractNumber 
from 
(
select distinct ContractNumber, MonthlyPayment , Duration , StartDate , EndDate 
from MyTable 
) x 
group by ContractNumber 
having count(*) >1