表名: HISTORY
格式如下:
CREATE TABLE DTUSER_TJ.DT_NEWS_VISIT_HISTORY
(
NUMNEWSHISID NUMBER(15) NOT NULL,
VC2CLIENTID VARCHAR2(32 BYTE) NOT NULL,
NUMNEWSRID NUMBER(15) NOT NULL,
DATACCESS DATE NOT NULL
)内容如下:
...
5073736,粤ACT7468,67598488,2008-11-7 14:43:31
5073738,匿ACC3694,74110447,2008-11-7 14:43:31
5073740,赣AAB9031,72009002,2008-11-7 14:43:31
5073741,闽AAN1007,74106560,2008-11-7 14:43:31
5073742,津AAD5937,74226905,2008-11-7 14:43:31
5073743,粤ACY9940,74292395,2008-11-7 14:43:31
5073744,匿AAM6741,74227151,2008-11-7 14:43:31
5073745,苏AAD4395,74244650,2008-11-7 14:43:31
....这个表记录了许多用户的访问记录。我的需求是: 从这个表中得到每个用户7天内的访问内容,有可能这个曾经在1个月前访问的,也能得到,而不是只是得到当前时间 7 天前的内容。请教大家!
格式如下:
CREATE TABLE DTUSER_TJ.DT_NEWS_VISIT_HISTORY
(
NUMNEWSHISID NUMBER(15) NOT NULL,
VC2CLIENTID VARCHAR2(32 BYTE) NOT NULL,
NUMNEWSRID NUMBER(15) NOT NULL,
DATACCESS DATE NOT NULL
)内容如下:
...
5073736,粤ACT7468,67598488,2008-11-7 14:43:31
5073738,匿ACC3694,74110447,2008-11-7 14:43:31
5073740,赣AAB9031,72009002,2008-11-7 14:43:31
5073741,闽AAN1007,74106560,2008-11-7 14:43:31
5073742,津AAD5937,74226905,2008-11-7 14:43:31
5073743,粤ACY9940,74292395,2008-11-7 14:43:31
5073744,匿AAM6741,74227151,2008-11-7 14:43:31
5073745,苏AAD4395,74244650,2008-11-7 14:43:31
....这个表记录了许多用户的访问记录。我的需求是: 从这个表中得到每个用户7天内的访问内容,有可能这个曾经在1个月前访问的,也能得到,而不是只是得到当前时间 7 天前的内容。请教大家!
大概这么写:
select NUMNEWSHISID,VC2CLIENTID,NUMNEWSRID,DATACCESS
from (select * ,rownum() over(partition by 用户ID order by DATACCESS desc) RN
from HISTORY)t
where t.RN <=7
SQL> SELECT * FROM DT_NEWS_VISIT_HISTORY; NUMNEWSHISID VC2CLIENTID NUMNEWSRID DATACCESS
---------------- -------------------------------- ---------------- -----------
5073736 粤ACT7468 67598488 2008-11-7 1
5073738 匿ACC3694 74110447 2008-11-7 1
5073740 赣AAB9031 72009002 2008-11-7 1
5073741 闽AAN1007 74106560 2008-11-7 1
5073742 津AAD5937 74226905 2008-11-7 1
5073743 粤ACY9940 74292395 2008-11-7 1
5073744 匿AAM6741 74227151 2008-11-7 1
5073745 苏AAD4395 74244650 2008-11-7 1
5073746 苏AAD4395 74244651 2008-10-11
5073747 苏AAD4395 74244652 2008-11-2 1
5073748 苏AAD4395 74244653 2008-11-1 111 rows selectedSQL> SELECT *
2 FROM (SELECT DT.*,
3 MAX(DATACCESS) OVER(PARTITION BY VC2CLIENTID) - DATACCESS DIFF
4 FROM DT_NEWS_VISIT_HISTORY DT) TT
5 WHERE DIFF <= 6; NUMNEWSHISID VC2CLIENTID NUMNEWSRID DATACCESS DIFF
---------------- -------------------------------- ---------------- ----------- ----------
5073740 赣AAB9031 72009002 2008-11-7 1 0
5073742 津AAD5937 74226905 2008-11-7 1 0
5073741 闽AAN1007 74106560 2008-11-7 1 0
5073744 匿AAM6741 74227151 2008-11-7 1 0
5073738 匿ACC3694 74110447 2008-11-7 1 0
5073745 苏AAD4395 74244650 2008-11-7 1 0
5073748 苏AAD4395 74244653 2008-11-1 1 6
5073747 苏AAD4395 74244652 2008-11-2 1 5
5073736 粤ACT7468 67598488 2008-11-7 1 0
5073743 粤ACY9940 74292395 2008-11-7 1 010 rows selected
*
from
DTUSER_TJ.DT_NEWS_VISIT_HISTORY
where
to_char(DATACCESS,'yyyy-mm-dd')>to_char(sysdate-DATACCESS,'yyyy-mm-dd')
FROM dt_news_visit_history a,
(SELECT vc2clientid, MAX (dataccess) acc
FROM dt_news_visit_history
GROUP BY vc2clientid) b
WHERE a.vc2clientid = b.vc2clientid AND b.acc - a.dataccess < 1
select * from HISTORY where VC2CLIENTID=XXX and (rq between (select max(rq)-interval '7' day from HISTORY
where VC2CLIENTID=XXX) and (select max(rq) from HISTORY where VC2CLIENTID=XXX) )