-2

こんにちは、このシナリオで私を助けてくれませんか。

表: メール_アーカイブ

 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  
4

3 に答える 3

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 

ここで動作することがわかります

于 2013-01-21T04:41:10.550 に答える
0

これは MySQL クエリです。テストする Oracle はありませんが、試してみるとよいでしょう。注: テーブル名は「test」です。LIMIT 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
于 2013-01-21T05:17:53.147 に答える
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;

ここにsqlfiddleのデモがあります


mail_idのみの最大日付とカウントが必要であると仮定してUPDATE

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;

ここにsqlfiddleのデモがあります

于 2013-01-21T06:17:07.477 に答える