2009-06-18 29 views
3

1つの列を持つテーブルABCを取得しました。作成された日付列。したがって、サンプル値は次のようになります。グループ別/集計日付範囲

私は結果があるようにクエリを書きたい
created 
2009-06-18 13:56:00 
2009-06-18 12:56:00 
2009-06-17 14:02:00 
2009-06-17 13:12:23 
2009-06-16 10:02:10 

count created 
2  2009-06-18 
2  2009-06-17 
1  2009-06-16 

は、基本的には各日付に属しているどのように多くのエントリを数えるが、時間を無視して。

これはOracleを使用したPL-SQLです。

アイデア?

+0

技術的には、この質問はPL-SQLに固有のものです –

答えて

2

select count(*), to_char('YYYY-MM-DD', created) from ABC group by to_char('YYYY-MM-DD', created)

11

TRUNC関数は、DATETIMEのDATEを返します。

select trunc(created),count(*) from ABC group by trunc(created) 
+0

私にそれを打ち明けてください:-) –

+1

この回答はORACLEでも有効ですが、SQL Serverにはその素晴らしい機能がありません。 – tekBlues

2

ただ、完全を期すために、私はサイズ任意に定義されたバケットのために働く一般バリアントを追加します:

SELECT trunc((created - to_date('2000.01.01', 'YYYY.MM.DD')) 
       * 24 
      )/24 
     + to_date('2000.01.01', 'YYYY.MM.DD') theDate 
     , count(*) 
    FROM Layer 
GROUP BY trunc((created - to_date('2000.01.01', 'YYYY.MM.DD')) 
       * 24 
      )/24 
     + to_date('2000.01.01', 'YYYY.MM.DD') 
ORDER BY 1; 

クエリ上記のあなたの時間単位でカウントを行います。より大きな間隔を得るためには24より小さいものを使用し、より小さな間隔を作るにはより大きなものを使用してください。 *と/の位置を逆にすると、バケツを日単位で作成することができます(例えば、「* 24」の代わりに「/ 7」を使用すると、1週間のバケツが与えられます)。