1

このようなテーブルがあります。

_id (integer)
event_name(varchar(20))
event_date(timestamp)

以下にいくつかのサンプルデータを示します。


ID         event_date                          event_name
101        2013-04-24 18:33:37.694818          event_A
102        2013-04-24 20:34:37.000000          event_B
103        2013-04-24 20:40:37.000000          event_A
104        2013-04-25 01:00:00.694818          event_B
105        2013-04-25 12:00:15.694818          event_A

上記の表のデータが以下の形式で必要です。

Date          count_eventA                       count_eventB
2013-04-24    2                                   1
2013-04-25    1                                   1

したがって、基本的には、各日付の各イベントの数が必要です。

目的の結果を得るために、以下のクエリを試しました。

SELECT A.date1 AS Date ,
       A.count1 AS count_eventA,
       B.count2 AS count_eventB,
           FROM
           (SELECT count(event_name)AS count1,
            event_date::date AS date1
            FROM tblname
            WHERE event_name='event_A'
            GROUP BY (event_date::date))AS A 
           LEFT JOIN
           (SELECT count(event_name)AS count1,
            event_date::date AS date1
            FROM tblname
            WHERE event_name='event_B'
            GROUP BY (event_date::date))AS B ON A.date1=B.date2 

より優れた最適化されたクエリを見つけるように提案してもらえますか? 、または私は良いアプローチに従っています。

4

3 に答える 3

0

以下のSQLチェックでPIVOTとUNPIVOTを探している例は非常に便利です

http://blog.sqlauthority.com/2008/06/07/sql-server-pivot-and-unpivot-table-examples/

于 2013-06-06T10:22:22.143 に答える