※2011/10/5 追記:Mototakerさんのご指摘により、一部修正を行いました。

Oracle(10g)での日付別集計の取得クエリに関するメモ。

前提:マツダスタジアムは、入場時に日付(date型)を時:分:秒までOracleに保存している。
欲しいデータ:2011年6月の入場者数を日別に抽出したい。

※テーブル名:zoom_zoom
※入場日付カラム名:enter_dt

SELECT

enter_dt as 入場日付,

count(enter_dt) as 入場者数

FROM

zoom_zoom

WHERE

enter_dt between to_date(‘2011/06/01′,’yyyy/mm/dd’) AND

to_date(‘2011/06/30′,’yyyy/mm/dd’)

GROUP BY

enter_dt

ORDER BY

enter_dt asc;

とすると、時:分:秒ごとにグルーピングされてしまい、日別にならない(T△T)

入場日付 |入場者数
—————————-+————-
2011/06/01 10:56:24 | 1
2011/06/01 11:12:12 | 1
2011/06/01 11:23:38 | 1
2011/06/01 11:38:32 | 1


なので、to_date関数を使ってenter_dtを日付変換することで、日別のカウントを取得。

SELECT

trunc(enter_dt) as 入場日付,

count(trunc(enter_dt)) as 入場者数

FROM

zoom_zoom

WHERE

enter_dt between to_date(‘2011/06/01 00:00:00′,’yyyy/mm/dd hh24:mi:ss’) AND

to_date(‘2011/06/30 23:59:59′,’yyyy/mm/dd hh24:mi:ss’)

GROUP BY

trunc(enter_dt)

ORDER BY

trunc(enter_dt) asc;

こうすると、日別の入場者数が取得可能にo(*^▽^*)o

入場日付 |入場者数
——————-+————-
2011/06/01 | 30,498
2011/06/02 | 32,129
2011/06/03 | 31,949
2011/06/04 | 32,134


がんばれ広島カープ!
マツダスタジアム行きたい!!