2016-08-03 43 views
0

让我们考虑一下,我有我的表如下数据:如何根据日期时间进行分组?

User id date time 
User1. 28-JUL-16 06:14:56 
User1. 28-JUL-16 04:12:12 
User2. 28-JUL -16 05:10:45 
User3. 30-JUL-16 03:10:12 

我想找到用户对日期明智的计数。 请帮忙!

+0

你有什么困难 - 只是从分组中排除时间部分?你是否在统计不同的用户,或每天每个用户的所有外观? –

回答

2

您可以使用the trunc() function忽略日期的时间部分,该部分默认将时间部分转换为午夜。然后你可以按这个分组。

with your_table (user_id, date_time) as (
    select 'User1.', to_date('28-JUL-16 06:14:56', 'DD-MON-RR HH24:MI:SS') from dual 
    union all select 'User1.', to_date('28-JUL-16 04:12:12', 'DD-MON-RR HH24:MI:SS') from dual 
    union all select 'User2.', to_date('28-JUL-16 05:10:45', 'DD-MON-RR HH24:MI:SS') from dual 
    union all select 'User3.', to_date('30-JUL-16 03:10:12', 'DD-MON-RR HH24:MI:SS') from dual 
) 
select to_char(trunc(date_time), 'DD-MON-RR') as date_only, count(distinct user_id) 
from your_table 
group by trunc(date_time); 

DATE_ONLY       COUNT(DISTINCTUSER_ID) 
------------------ --------------------------------------- 
28-JUL-16            2 
30-JUL-16            1 

我已经包括distinct,因为它如果要统计一个用户不止一次n中的同一天更是不明确;如果你这样做,那么删除它。

select to_char(trunc(date_time), 'DD-MON-RR') as date_only, count(user_id) 
from your_table 
group by trunc(date_time); 

DATE_ONLY         COUNT(USER_ID) 
------------------ --------------------------------------- 
28-JUL-16            3 
30-JUL-16            1 
相关问题