2011-11-15 160 views
0

我有一個臨時表的結果(如下面的存儲過程),我想從這個臨時表中退出只有記錄最大stage_dt這將刪除dups在客戶端名單。 rownum列是標識。如何從此臨時表中選擇僅列stage_dt中具有最大日期的記錄?從temp表中選擇沒有重複的記錄由maxdate列

lname  fname RO#  fow_visit stage_dt     T_Stage status rownum 
ADINYIRA DELA 09-0373 2011-10-06 2010-09-28 17:02:30.460   Y  6 
ADINYIRA DELA 09-0373 2011-10-06 2009-10-08 12:50:33.007 T2  Y  7 
APPELLO CAROL 08-0493 2011-04-13 2011-04-08 12:48:31.310   Y  40 
APPELLO CAROL 08-0493 2011-04-13 2008-10-13 18:20:49.210 4  Y  41 
BLACK  ERMA 10-0054 2011-10-06 2010-02-02 16:04:42.273 T0  Y  90 
BLACK  ERMA 10-0054 2011-10-06 2010-02-02 16:23:11.193 T1c  Y  91 
BROWN  VERSIE 07-0455 2011-09-22 2007-10-17 15:19:10.330 0(is) Y  123 
BROWN  VERSIE 07-0455 2011-09-22 2009-08-21 12:23:50.980 T2  Y  124 
+0

忘了附上樣本RO#lname fname fow_visit stage_dt T_Stage surv_status rownum 05-0022趙先明2011-03-30 2005-04-14 14:58:02 650 3 Y 2 05-0023趙先明2011-03 -30 2005-04-14 14:58:02.650 3 Y 3 05-0081 BAREFIELD SYBIL 2011-07-20 2008-07-02 11:18:37.950 1c Y 13 05-0081 BAREFIELD SYBIL 2011-07-20 2008- 07-02 11:18:37.950 2 Y 14 – pots06

回答

0

你可以試試這個查詢:

with temp_cte([RO#], [stage_dt]) 
as 
(
    select [RO#], max([stage_dt]) as [stage_dt] 
    from temp 
    group by [RO#] 
) 

select temp.* 
from temp 
join temp_cte on temp_cte.[RO#] = temp.[RO#] 
    and temp_cte.[stage_dt] = temp.[stage_dt] 

還有其他的方式,但我認爲這是簡單的。

+0

謝謝你山姆,但我發現了一些其他的東西 - 一些stage_dt在同一天,小時,分鐘和RO#中有一些dups: – pots06

+0

如果是這樣的話,你可以使用rank ()通過stage_dt的分區順序,並選擇rank()= 1。 –

0

你可以試試這個:

SELECT * FROM temp_table 
    WHERE stage_dt IN (SELECT max(stage_dt) FROM temp_table) 

根據數據庫系統中,IN操作員可以通過=或適合數據庫系統中的另一個操作者更換。