如何分组日期时间?

时间:2016-08-03 10:48:02

标签: sql oracle11g

让我们考虑一下我的表中有以下数据:

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

我想在日期明智地找到用户数。 请帮忙!

1 个答案:

答案 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,因为目前尚不清楚您是否想在同一天多次计算一位用户;如果你这样做,那就删除它。

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