表info
id 用户 内容 时间
1 张三 232 2007-1-1
2 李四 323 2007-1-2
3 张三 232 2007-1-3
4 李四 123 2007-1-4用Sql 得出 用户出现的次数 以及最近一次的数据 结果如下id 用户 内容 时间 出现次数
3 张三 232 2007-1-3 2
4 李四 123 2007-1-4 2不知道该如果写。。
id 用户 内容 时间
1 张三 232 2007-1-1
2 李四 323 2007-1-2
3 张三 232 2007-1-3
4 李四 123 2007-1-4用Sql 得出 用户出现的次数 以及最近一次的数据 结果如下id 用户 内容 时间 出现次数
3 张三 232 2007-1-3 2
4 李四 123 2007-1-4 2不知道该如果写。。
insert into mtest values (1, '张三', '232', '2007-1-1');
insert into mtest values (2, '李四', '323', '2007-1-2');
insert into mtest values (3, '张三', '232', '2007-1-3');
insert into mtest values (4, '李四', '123', '2007-1-4');
commit;
select * from mtest;
select b 姓名, count(b) 次数 from mtest group by b;drop table mtest;
from info a
inner join
(select 用户,max(时间) 时间,count(b) 次数
from info
group by 用户) b on a.用户=b.用户 and a.时间=b.时间
设定用户为A1 内容为A2 时间为A3
select A.id,A.A1 用户,C.A2 内容,C.A3 时间,B.num 次数
(select max(id) id,A1 from info group by A1) A,
(select A1,sum(1) num from info group by A1) B,
info C where A.ID=c.ID and A.A1=B.A1
2 UNION ALL
3 SELECT 2 ID,'李四' NAME,323 TEXT,'2007-1-2' TIME FROM DUAL
4 UNION ALL
5 SELECT 3 ID,'張三' NAME,232 TEXT,'2007-1-3' TIME FROM DUAL
6 UNION ALL
7 SELECT 4 ID,'李四' NAME,123 TEXT,'2007-1-4' TIME FROM DUAL
8 )
9 SELECT * FROM (select A.*,ROW_NUMBER()OVER(PARTITION BY NAME ORDER BY TIME DESC) RN from A)
10 WHERE RN=1
11 ORDER BY ID
12 /
ID NAME TEXT TIME RN
---------- ---- ---------- -------- ----------
3 張三 232 2007-1-3 1
4 李四 123 2007-1-4 1
應該是這樣的
SQL> WITH A AS (SELECT 1 ID,'張三' NAME,233 TEXT,'2007-1-1' TIME FROM DUAL
2 UNION ALL
3 SELECT 2 ID,'李四' NAME,323 TEXT,'2007-1-2' TIME FROM DUAL
4 UNION ALL
5 SELECT 3 ID,'張三' NAME,232 TEXT,'2007-1-3' TIME FROM DUAL
6 UNION ALL
7 SELECT 4 ID,'李四' NAME,123 TEXT,'2007-1-4' TIME FROM DUAL
8 )
9 SELECT ID,NAME,TEXT,TIME,RM FROM (select A.*,ROW_NUMBER()OVER(PARTITION BY NAME ORDER BY TIME DESC) RN,COUNT(NAME)OVER(PARTITION BY NAME ORDER BY ID) RM from A)
10 WHERE RN=1
11 ORDER BY ID
12 /
ID NAME TEXT TIME RM
---------- ---- ---------- -------- ----------
3 張三 232 2007-1-3 2
4 李四 123 2007-1-4 2
用户,
max(内容) over(partition by 用户) content,
max(时间) over(partition by 用户) time,
count(*) over(partition by 用户) counts
from a02
用户,
max(内容) over(partition by 用户) content,
max(时间) over(partition by 用户) time,
count(*) over(partition by 用户) counts
from info
这样分组对你的这几行数据可以,但是对整个数据表可能有点问题。仅供参考。
里面中文用你自己的实际字段即可。
SQL> select zz.sid,
2 zz.cust,
3 zz.content,
4 zz.custdate,
5 zz.count_cust
6 from (
7 select tt.*,
8 count(1) over(partition by cust) count_cust,
9 rank() over(partition by cust order by custdate desc) as rn
10 from tt
11 )zz
12 where rn = 1; SID CUST CONTENT CUSTDATE COUNT_CUST
---------- ---- ---------- ----------- ----------
4 李四 123 1/4/2007 2
3 张三 232 1/3/2007 2
SQL> select * from test; SID CUST CONTENT CUSTDATE
---------- ---- ---------- -----------
1 张三 232 1/1/2007
2 李四 323 1/2/2007
3 张三 232 1/3/2007
4 李四 123 1/4/2007
5 李四 453 1/1/2007
6 李四 451 1/4/20076 rows selectedSQL>
SQL> select zz.sid,
2 zz.cust,
3 zz.content,
4 zz.custdate,
5 zz.count_cust
6 from (
7 select tt.*,
8 count(1) over(partition by cust) count_cust,
9 rank() over(partition by cust order by custdate desc) as rn
10 from test tt
11 )zz
12 where rn = 1; SID CUST CONTENT CUSTDATE COUNT_CUST
---------- ---- ---------- ----------- ----------
4 李四 123 1/4/2007 4
6 李四 451 1/4/2007 4
3 张三 232 1/3/2007 2