2016-07-26 56 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 

我要找到每個CompanyID,並在公司開始運行什麼擴展到尺寸比原來的起始大小大。

所以我想有一個結果集是這樣的:

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

非常感謝您的時間提前!

我也做我的研究,發現這個答案Select rows where column value has changed,然而,這只是連續運行比較,而不是比較第一次運行一個公司開始。

+0

如何才能找到原來的大小? – 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

沒有對第二個答案的運氣,但你絕對向我指出了正確的方向謝謝! – vincwng