2013-12-15 168 views
-3

我得到了一個表,4個字段:公司的SQL查詢驗證

[record_id] is the pk 
[pay_serial_number] should always be increased +1 
[worker_id] each worker has unique id 
[content] just some content. 

我被告知,加法功能有一個bug,並在許多序列號跳下。 我需要創建一個查詢來爲每個工人打印缺少的序列號。

[worker_id][missing serial number] 
[worker_id][missing serial number] 
[worker_id][missing serial number] 

打印此類表格的最快速和最有效的方法是什麼?

回答

1

找到「缺失」的序列號很難。它們不在數據中,因此您必須生成它們。

但是,找到丟失的範圍並不困難。爲此,請使用相關的子查詢來獲取下一個序列號(如果可用,請使用lead()lag()函數)。然後找到任何有差距的地方。

下面是該查詢:

select worker_id, pay_serial_number + 1 as FirstMissing, 
     (nextpsn - pay_serial_number - 1) as NumMissing 
from (select t.*, 
      (select min(pay_serial_number) 
       from t_workers_pay t2 
       where t2.worker_id = t.worker_id and -- ASSUMING SEQUENTIAL FOR A WORKER 
        t2.pay_serial_number > t.pay_serial_number 
      ) as nextpsn 
     from t_workers_pay t 
    ) t 
where nextpsn - pay_serial_number > 1; 
+0

什麼爲t,什麼是T2? – user1021182

+0

@ user1021182。 。 。 't'既是你的表名又是一個表別名。 't2'是一個表別名。 –

+0

我不能使這個查詢工作,我用我的表「t_workers_pay」的名稱替換所有的t,並且它不工作 - 在't2'附近獲得錯誤的語法 – user1021182