次のようなテーブルがあります
一意の識別子であるdrgはそうではないので、私はそれを修正するという個人的な挑戦から始めました。私はこれを無数の方法で簡単に行うことができましたが、私はいくつかの新しい技術を学ぶために別の方法でいくつかのことをしようとしています。テーブルから削除する必要があるのは、drgが一意ではなく、eff_dateが**maxeff_date未満**である行です。
必要なものを見つけるために使用しました
select d1.drg, MAX(d1.eff_date) as maxEffDate,d2.drgdesc
from drgtable d1
inner join drgtable d2 on d1.drg=d2.drg
group by d1.drg,d2.drgdesc
having MAX(d1.eff_date) = MAX(d2.eff_date)
これを新しいテーブルに選択して古いテーブルを削除するのではなく、deleteステートメントで実行したいと思います。
以下の奇妙なクエリでの私のしかしプロセスは、私が使用した上記のクエリからテーブルになかった行を見つけて削除することでした。近づいたが行き詰まっている。また、これを行う簡単な方法がある場合は、お知らせください。ありがとう
--これの目的は、d4になかったd3の行を見つけて、それらを削除することでした。それほど遠くまでは行きませんでした
delete from
drgtable
where
(
select * from drgtable as d3
left join
(
select d1.drg, MAX(d1.eff_date) as maxEffDate,d2.drgdesc
from drgtable d1
inner join drgtable d2 on d1.drg=d2.drg
group by d1.drg,d2.drgdesc
having MAX(d1.eff_date) = MAX(d2.eff_date)
) d4 on d4.drg =d3.drg and d4.maxEffDate = d3.eff_date and d3.drgdesc = d4.drgdesc
)