簡體   English   中英

SAS EG (SQL) 刪除一列中有最大值的行

[英]SAS EG (SQL) deleting rows where max value in one column

我需要刪除最大值為duty_perd_id的所有行,其中rotn_prng_nbrempl_nbr相同(彼此不同,但是這兩個保持不變的所有行的最大值)。 從下表中它應該刪除第 3,7 和 9 行。

rotn_prng_nbr empl_nbr duty_perd_id
B93 12 1
B93 12 2
B93 12 3
B21 12 1
B21 12 2
B21 12 3
B21 12 4
B21 18 1
B21 18 2

使用 SAS EG。 現在所有的都在下面:

選項1:

 create table middle_legs as
    select t.*
    from actual_flt_leg as t
    where t.duty_perd_id < (select max(t2.duty_perd_id)
                            from actual_flt_leg as t2
                            where t2.rotn_prng_nbr = t.rotn_prng_nbr and
                                  t2.empl_nbr = t.empl_nbr
                           );

這完全符合預期,但速度非常慢。 我有但無法完成的另一個想法如下。

選項 2:

create table last_duty_day as
Select * from actual_flt_leg 
inner join (
    select actual_flt_leg.Rotn_Prng_Nbr,actual_flt_leg.empl_nbr, max(duty_perd_id) as last_duty
    from actual_flt_leg
    group by actual_flt_leg.Rotn_Prng_Nbr, actual_flt_leg.empl_nbr
) maxtable on 
    actual_flt_leg.Rotn_Prng_Nbr = maxtable.Rotn_Prng_Nbr
    and actual_flt_leg.empl_Nbr = maxtable.empl_Nbr
    and actual_flt_leg.duty_perd_id = maxtable.last_duty;

選項 2 找到給定對的所有最高duty_perd_id ,我想知道是否有任何“反向連接”只能顯示原始表中與我在選項 2 中創建的新表不匹配的行。

如果有辦法讓選項 1 更快,請完成選項 2,或者我想不出的任何其他事情,我會很感激。 謝謝!

你快到了。 你只想要<

Select *
from actual_flt_leg inner join
     (select actual_flt_leg.Rotn_Prng_Nbr,actual_flt_leg.empl_nbr, max(duty_perd_id) as last_duty
      from actual_flt_leg
      group by actual_flt_leg.Rotn_Prng_Nbr, actual_flt_leg.empl_nbr
     ) maxtable 
     on actual_flt_leg.Rotn_Prng_Nbr = maxtable.Rotn_Prng_Nbr and
        actual_flt_leg.empl_Nbr = maxtable.empl_Nbr and
        actual_flt_leg.duty_perd_id < maxtable.last_duty;

在 SAS SQL 中,這很容易:

data have;
input rotn_prng_nbr $ empl_nbr duty_perd_id;
datalines;
B93 12 1
B93 12 2
B93 12 3
B21 12 1
B21 12 2
B21 12 3
B21 12 4
B21 18 1
B21 18 2
;;;;
run;

proc sql;
  select *
    from have
    group by rotn_prng_nbr, empl_nbr
    having duty_perd_id lt max(duty_perd_id);
quit;

在我見過的任何其他系統中,這不是合法的 SQL,但它在 SAS 中有效。 您可以group by一組變量分組,同時仍對所有變量使用select ,包括不在分組依據的變量; SAS 只需執行兩個查詢並在后台為您合並它們。

注意:查詢需要將匯總統計信息與原始數據重新合並。

據我了解,引擎蓋下的實際結果與戈登建議的更“兼容”的版本完全相同; 只是您喜歡輸入更少還是更多兼容的 SQL 代碼的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM