1

私はテーブルを持っています:

CREATE TABLE SYSTEM.DATA
(
    USER VARCHAR2(20 BYTE),
    TIME  DATE,
);

INSERT INTO DATA ("USER", "TIME") VALUES ('A', '2013/3/24 AM 04:00:45');
INSERT INTO DATA ("USER", "TIME") VALUES ('B', '2013/03/24 PM 03:51:18');
INSERT INTO DATA ("USER", "TIME") VALUES ('C', '2013/03/24 PM 03:57:49');
INSERT INTO DATA ("USER", "TIME") VALUES ('D', '2013/03/25 AM 10:05:30');
INSERT INTO DATA ("USER", "TIME") VALUES ('E', '2013/03/25 AM 10:11:30');

1日あたりの数を取得するにはどうすればよいですか(今日はAM7:30で、明日はAM7:29で終了します)?このように

DATE   | COUNT
03/23  |     1   ~~~THIS IS 'A', '2013/3/24 AM 04:00:45'
03/24  |     2
03/25  |     2
4

2 に答える 2

2

「時間」から 7.5 時間を引き、それを集計に使用します。

select to_char("time" - 7.5/24, 'YYYY-MM-DD') as thedate, count(*)
from "data"
group by to_char("time" - 7.5/24, 'YYYY-MM-DD')
order by 1
于 2013-07-09T02:58:34.273 に答える
0

これは、MS Sql サーバーのソリューションです。(私は Oracle に詳しくありませんが、同様のことが可能であると思います。)@date_beginおよび@date_endは、結果を取得する日付の間隔に使用できるパラメーターです。このソリューションは、Gordon Linoff が提案したものとは異なり、dataテーブルにアイテムがない日付にはゼロを返しますが、彼のクエリは正の値を持つ日付のみを返します。

    with dates (date_item) as
    (
        select dateadd(minute,450,cast(@date_begin as datetime)) as date_item
        union all
        select dateadd(dd,1,d.date_item) as date_item from dates d where d.date_item<@date_end
    )
    select
        dateadd(day, 0, datediff(day, 0, dates.date_item)),
        sum(case when data.[time]>=dates.date_item and data.[time]<dateadd(day,1,dates.date_item) then 1 else 0 end)
    from dates
    left outer join data on 1=1
    group by
        dates.date_item;
于 2013-07-09T04:58:10.550 に答える