如何显示与Oracle中的列不同的日期数据(来自同一个表)

时间:2014-01-08 18:54:01

标签: sql oracle

如果标题不太清楚我很抱歉,但以下说明会更加准确。

我有以下观点:

DATE          USER         CONDITION
20140101      1            A
20140101      2            B
20140101      3            C
20140108      1            C
20140108      3            B
20140108      2            C

我需要做的是提供本周和之前7天所有条件下的用户数量。

输出应该是这样的:

Condition          Today          Last_Week (Today-7)
A                  0              1
B                  1              1
C                  2              1

我如何在Oracle中执行此操作?我将需要这样做4周所以今天是7,14-21。

我已尝试使用group by,但我将“week2”作为行。然后我尝试了类似Select conditions, (select count(users) from MyView where DATE='Today') FROM MyView的东西(查看实际工作的东西),但它对我不起作用。

通过对接受的答案进行一些修改来实现这一目标:

select condition, 
   count(case when to_date(xdate) = to_date(sysdate) then 1 end) to_day,
   count(case when to_date(xdate) = to_date(sysdate-7) then 1 end) last_7_days
from my_table
group by condition

2 个答案:

答案 0 :(得分:1)

select condition, count(case when to_date(xdate) = to_date(sysdate) then 1 end) to_day,
       count(case when to_date(xdate) < to_date(sysdate) then 1 end) last_7_days
  from my_table
 where to_date(xdate) >= to_date(sysdate) - 7
 group by condition

答案 1 :(得分:0)

select condition
,      sum
       ( case
         when date between trunc(sysdate) - 7 and trunc(sysdate) - 1
         then 1
         else 0
         end
       )
       last_week
,      sum
       ( case
         when date between trunc(sysdate) and trunc(sysdate + 1)
         then 1
         else 0
         end
       )
       this_week
from   table
group
by     condition

通过使用条件计数(作为总和)并在条件上分组,您可以过滤掉所有所需的日期。请注意,使用trunc将导致使用当天的开头。