2016-07-26 8 views
0

私はこのようなテーブルがあります。列の値が最初に増加する行を見つける方法はありますか?

RunId------CompanyId------NumberOfEmployees 
1-------------------1-------------------10 
2-------------------1-------------------10 
3-------------------1-------------------8 
4-------------------1-------------------9 
5-------------------1-------------------11* (The first time company 1 expands to a size bigger than it's original size of 10) 
6-------------------1-------------------12 
3-------------------2-------------------50 
4-------------------2-------------------55* (The first time company 2 expands to a size bigger than it's original size of 55) 
5-------------------2-------------------54 
1-------------------3-------------------100 
2-------------------3-------------------100 
3-------------------3-------------------100 

をそして、私は、各企業IDを見つけるしたい、何を実行同社は最初の出発サイズより大きいですサイズに拡大し始めました。事前にお時間をそんなに

CompanyId------StartRun------ExpansionRun-------StartingSize 
1-------------------1-------------------5-------------------10 
2-------------------3-------------------4-------------------50 

ありがとう:

だから私はこのような結果セットを持っているしたいと思います!

私は研究を行って、この回答がSelect rows where column value has changedであることを発見しましたが、これは開始された会社の最初の実行と比較するのではなく、連続した実行を比較するだけです。

+0

どのように1は、元のサイズを見つけることができますか? – 1000111

+0

元のサイズは、当社が最初に見たランのサイズです。例:会社2の元のサイズは50です。最初に表示されているのはラン3でサイズ50です。ありがとう! – vincwng

答えて

1

最初に元の開始サイズを見つける必要があります。最小の実行IDから(おそらく)これを得ることができます。次に、あなたが探している情報を取得します。

select c.CompanyId, min(tt.runid) as FirstBigger_runid 
from (select t.CompanyId, min(runid) as minrunid 
     from t 
     group by t.CompanyId 
    ) c join 
    t t 
    on t.CompanyId = c.CompanyId and t.runid = c.minrunid left join 
    t tt 
    on tt.CompanyId = c.CompanyId and 
     tt.runid > c.minrunid and 
     tt.NumberOfEmployees > t.NumberOfEmployees 
group by c.RunId; 

これは、会社が元の従業員数を初めて超えたときのrunidを取得します。追加の結合は、その行から他のすべての情報を取得します。ここで

は基準を満たしている実行IDを取得する別の方法です:

select t.CompanyId, min(RunId) as theRunId 
from (select t.*, 
      (select t2.NumberOfEmployees 
       from t t2 
       where t2.CompanyId = t.CompanyId 
       order by t2.RunId 
       limit 1 
      ) as first_NumberOfEmployees 
     from t 
     having NumberOfEmployees > first_NumberOfEmployees 
    ) t 
group by t.CompanyId; 
+0

ありがとうございました。私はあなたの最初のソリューションを少し編集し、私のために働くようになった。最後の行にc.CompanyId、c.minrunid、t.NumberOfEmployeesでグループを追加する必要がありました。また、最初の行にt.NumberOfEmployeesを追加しました。 – vincwng

+0

2番目の答えに多大な幸運はありませんでしたが、間違いなく正しい方向に私を指摘しました。ありがとう! – vincwng

関連する問題