2013-07-09 78 views
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'); 

我怎麼每天(即今天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 

回答

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 
0

這是MS Sql Server的解決方案。 (我對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; 
相關問題