2013-01-21 45 views
-2

嗨能否請你幫我對於這種情況,如何以檢索最後更新的記錄在甲骨文

表:Mail_Archives

Mail_ID  Archived_by   Archived_date 
    001  Sam    21/11/2011 
    002  Tina    10/10/2012 
    002  Tina    10/10/2012 
    004  Zark    10/10/2011 

如何形成這種輸出的查詢,我需要查詢結果包括計數在內的最近歸檔日期。例

Count  Archived_by  Archived_Date 

    2   Tina   10/10/2012 

回答

0

嘗試:

select * from (
    select * from Mail_Archives order by Archived_date desc 
) where rownum=1 

更新

select count(a.Mail_ID) top_one, b.archived_by, b.archived_date 
from Mail_Archives a, 
    (select * from (
      select * from Mail_Archives order by Archived_date desc 
     ) where rownum=1 
    ) b 
where a.archived_by = b.archived_by 
group by b.archived_by, b.archived_date 

你可以看到,它的工作原理here

+0

喜是它的工作很好,但我需要最新Archived_Date – SANJAY

+0

計數計什麼?由更新最後一條記錄的同一用戶執行的所有更新的計數?如果同一用戶在兩年前有過更新,那麼該更新也應該如何計算?你應該定義一個好的標準 – alfasin

+0

如果你在我的示例表中看到,在Archived_BY中有兩個記錄名爲TINA,所以我需要計數以及最新的archived_Date和archived_by – SANJAY

0

這是一個MySQL查詢,我不知道有Oracle來測試它,但它可能會給你一個很好的嘗試。 注意:表名稱爲'測試'。 極限1將只需要最上面的一個(示出最大計數) 上或在表小寫屬性使得在查詢中沒有差別,另外,整數前00將被默認

SELECT COUNT(mail_ID) as top_one, archived_by, archived_date 
FROM test 
GROUP BY mail_id 
HAVING COUNT(*) = (
    SELECT COUNT(*) AS total 
    FROM test 
    GROUP BY mail_id 
    ORDER BY total DESC 
    LIMIT 1 
) 


top_one  archived_by  archived_date 
2   Tina    2012-10-10 
0

嘗試截斷:

select mail_id, archived_by, archived_date, cnt 
from (
select mail_id, archived_by, archived_date, count(*) cnt 
from Mail_Archives 
group by mail_id, archived_by, archived_date 
order by archived_date desc) 
where rownum = 1; 

或者(如果你喜歡的窗函數)

select mail_id, archived_by, archived_date, cnt from (
select mail_id, 
     archived_by, 
     archived_date, 
     row_number() over (order by archived_date desc) rn, 
     count(*) over (partition by mail_id, archived_by, archived_date) cnt 
from Mail_Archives) 
where rn = 1; 

Here is a sqlfiddle demo


UPDATE假設你想要的最大日期和次數,僅用於mail_id

select mail_id, archived_by, archived_date, cnt from (
select mail_id, 
     archived_by, 
     archived_date, 
     row_number() over (order by archived_date desc) rn, 
     count(*) over (partition by mail_id) cnt 
from Mail_Archives) 
where rn = 1; 

Here is a sqlfiddle demo

+0

嗨,謝謝你的幫助 – SANJAY

+0

但是請檢查這個鏈接,稍微修改一下數據http://www.sqlfiddle.com/#!4/9b5d8/1現在Cnt的狀態爲「1 「但我的預期結果應該是」2「,因爲郵件ID」002「有兩個條目 – SANJAY

+0

@SANJAY,請參閱我的更新 –