用SQL指令選出資料後,但如何設定若是c.UPDATE_USER='SYS'且c.AM_APPLY的資料相同,則保留c.UPDATE_TIME較新的!,若c.UPDATE_USER<>'SYS',則全部保留.
最終的只是要select出來保留的,不保留的不會被select出來,也沒有要刪除檔案.
select a.ID_PROJ,c.NO_APPLY_A,c.AM_APPLY,c.UPDATE_USER,c.UPDATE_TIME
from PRJECTA a
left join PRJAPPLYA as c on a.id_proj=c.id_proj
where a.DT_YYY='108' and a.ID_DEPT_BUDG='505' and c.DT_EXEC like '201901%' and a.FG_SEAS<>'0'
order by c.UPDATE_USER DESC ,c.UPDATE_TIME
一般安全的做法。是先將維一性條件及最新的一筆資料。先加入到一個temp表後。
再來做全數移除對應資料。
最後再從暫存檔中copy過來。
一般你說的方式要選擇的情況。太多多餘條件的情況下。很難給與一定符合的處理。
所以最好還是做分開動作會比較安全。
你試試..
select ID_PROJ
,NO_APPLY_A
,AM_APPLY
,UPDATE_USER
,UPDATE_TIME
from (
select a.ID_PROJ
,c.NO_APPLY_A
,c.AM_APPLY
,c.UPDATE_USER
,c.UPDATE_TIME
,ROW_NUMBER() Over (Partition By a.ID_PROJ,c.AM_APPLY Order by c.UPDATE_TIME desc) Sort
from PRJECTA a
left join PRJAPPLYA as c on a.id_proj=c.id_proj
where a.DT_YYY='108'
and a.ID_DEPT_BUDG='505'
and c.DT_EXEC like '201901%'
and a.FG_SEAS<>'0'
and c.UPDATE_USER='SYS'
) as k
where Sort = 1
order by UPDATE_USER DESC
,UPDATE_TIME
以下是我自己try的..
declare @PRJECTA table(
ID_PROJ varchar(50)
)
declare @PRJAPPLYA table(
ID_PROJ varchar(50)
,NO_APPLY_A varchar(50)
,AM_APPLY money
,UPDATE_USER varchar(50)
,UPDATE_TIME time
)
insert into @PRJECTA
values('10850501100101')
insert into @PRJAPPLYA
values('10850501100101','a01',7673,'SYS','12:43:07')
,('10850501100101','a02',7673,'SYS','14:04:37')
,('10850501100101','a03',7719,'SYS','12:43:07')
,('10850501100101','a04',7719,'SYS','14:04:37')
select a.ID_PROJ
,c.NO_APPLY_A
,c.AM_APPLY
,c.UPDATE_USER
,c.UPDATE_TIME
,ROW_NUMBER() Over (Partition By a.ID_PROJ,c.AM_APPLY Order by c.UPDATE_TIME desc) Sort
from @PRJECTA a
left join @PRJAPPLYA as c on a.ID_PROJ=c.ID_PROJ
where c.UPDATE_USER='SYS'
select ID_PROJ
,NO_APPLY_A
,AM_APPLY
,UPDATE_USER
,UPDATE_TIME
from (
select a.ID_PROJ
,c.NO_APPLY_A
,c.AM_APPLY
,c.UPDATE_USER
,c.UPDATE_TIME
,ROW_NUMBER() Over (Partition By a.ID_PROJ,c.AM_APPLY Order by c.UPDATE_TIME desc) Sort
from @PRJECTA a
left join @PRJAPPLYA as c on a.ID_PROJ=c.ID_PROJ
where c.UPDATE_USER='SYS'
) as k
where Sort = 1
order by UPDATE_USER DESC
,AM_APPLY
,UPDATE_TIME