2016-06-22 16 views
0

SQLは

私は私が条件によって1 BOM/1 AltBOMChangeNo最後の選択で選択したい違い、重複データ

BOMcat | BOM | AltBOM | Counter | ChangeNo | DeID | DID | PreCounter | Baseqty 
M  | 7882 | A  |  26 | GUC320140101 | X |  |   |100.000 
M  | 7882 | B  |  1 | GUC320140101 | X |  |   |100.500 
M  | 7882 | B  |  307 | GUC320141225 | X |  | 1   |100.500 
M  | 9772 | 01  |  600 | GUC120140904 | X |  | 397  |116.188 
M  | 9772 | 01  |  601 | GUC120150504 | X |  | 600  |116.488 
M  | 9772 | 01  | 1021 | GUC120150703 | X |  | 601  |116.488 

周りのデータを持っています。

  • PreCounter:この行はどの行がEXに変更されているのですか。 PreCounter 1本のラインがBOMを変更持ってはCounter 1
  • 'Changeno' を持っている:StructrueはGUCXYYYYMMDD
    です - X:実行中の数
    - YYYY:年
    - MM:月
    - DD:日

M | 7882 | A |  26 | GUC320140101 | X | |  | 100.000 
M | 7882 | B | 307 | GUC320141225 | X | | 1 | 100.500 
M | 9772 | 01 | 1021 | GUC120150703 | X | | 601 | 116.488 
+0

データを自分で取得しようとしましたか? –

+0

MSアクセスのデータを照会したい。 –

答えて

0

where句の相関サブクエリでこれを行います。

select t.* 
from t 
where t.changeno = (select max(t2.changeno) 
        from t t2 
        where t2.bom = t.bom and t2.altbom = t.altbom 
        ); 
0

最も簡単な方法は、を使用することです結果を期待しますより高いChangeNo有する同じBOM/AltBOMと他の行がない場合行を返す:あるいは

select * 
from tablename t1 
where not exists (select * from tablename t2 
        where t2.BOM = t1.BOM 
        and t2.AltBOM = t1.AltBOM 
        and t2.ChangeNo > t1.ChangeNo) 

を有する自己joinを行い、group by:MSアクセスIで

select t1.* 
from tablename t1 
    join (select BOM, AltBOM, MAX(ChangeNo) as ChangeNo 
      from tablename 
      group by BOM, AltBOM) t2 
    on t1.BOM = t2.BOM and t1.AltBOM = t2.AltBOM and t1.ChangeNo = t2.ChangeNo 
+0

ありがとう、私のコードとしてのパフォーマンスがこのロジックを使用します –

関連する問題