我用的是MSSQL,有两表,一个表A记录的是用户点击博客情况,表B记录的是博客的点击统计结果: 表A
-------------------------------------------------
博客名 用户IP 点击时间
--------------------------------------------------
老三的店 127.0.1.1 2009-1-1 23:21:21
老三的店 127.0.1.1 2009-1-1 23:21:20
老三的店 127.0.1.1 2009-1-1 23:21:19
老三的店 127.0.1.1 2009-1-1 23:21:18
表B
-------------------------------------------------
博客名 累计点击
-------------------------------------------------
老三的店 10
为了效率和屏蔽重复点击,数据库会在凌晨对表A的中数据进行统计(同一IP一小时内只记录一次,这个可以用Group解决),并将统计结果累加到表B中。 请教高手,用SQL怎么实现,对表A的数据统计结果逐一的update到表B中?谢了
-------------------------------------------------
博客名 用户IP 点击时间
--------------------------------------------------
老三的店 127.0.1.1 2009-1-1 23:21:21
老三的店 127.0.1.1 2009-1-1 23:21:20
老三的店 127.0.1.1 2009-1-1 23:21:19
老三的店 127.0.1.1 2009-1-1 23:21:18
表B
-------------------------------------------------
博客名 累计点击
-------------------------------------------------
老三的店 10
为了效率和屏蔽重复点击,数据库会在凌晨对表A的中数据进行统计(同一IP一小时内只记录一次,这个可以用Group解决),并将统计结果累加到表B中。 请教高手,用SQL怎么实现,对表A的数据统计结果逐一的update到表B中?谢了
累计点击=B.累计点击+A.cnt
FROM (
SELECT
博客名,COUNT(*) AS cnt
FROM (
SELECT 博客名
FROM 表A
GROUP BY 博客名,CONVERT(VARCHAR(13),点击时间,120)
) AS T
GROUP BY 博客名
) AS A
JOIN 表B AS B
ON A.博客名=B.博客名;
select 博客名,count(*)
from (select distinct 博客名,用户IP,CONVERT(VARCHAR(13),点击时间,120) as 点击时间 from tb )A
group by 博客名
update ....
else
insert into ....
SELECT
FROM(
SELECT 博客名,COUNT(*) AS cnt
FROM (
SELECT 博客名
FROM 表A
GROUP BY 博客名,CONVERT(VARCHAR(13),点击时间,120)
) AS T
) AS A
WHERE NOT EXISTS(
SELECT *
FROM 表B
WHERE A.博客名=博客名
);
UPDATE B SET
累计点击=B.累计点击+A.cnt
FROM (
SELECT
博客名,COUNT(*) AS cnt
FROM (
SELECT 博客名
FROM 表A
GROUP BY 博客名,CONVERT(VARCHAR(13),点击时间,120)
) AS T
GROUP BY 博客名
) AS A
JOIN 表B AS B
ON A.博客名=B.博客名;
set 累计点击=累计点击+a2.点击次数
from
(
select
博客名,
sum(点击次数) as 点击次数
from (
select
博客名,
用户IP,
count(distinct convert(char(13),点击时间,120)) as 点击次数
from 表A
) a1
group by 博客名
) a2
where 表B.博客名=a2.博客名
set 累计点击=累计点击+a2.点击次数
from
(
select
博客名,
sum(点击次数) as 点击次数
from (
select
博客名,
用户IP,
count(distinct convert(char(13),点击时间,120)) as 点击次数
from 表A
group by 博客名,用户IP
) a1
group by 博客名
) a2
where 表B.博客名=a2.博客名
--1.不存在博客名的先插入insert into b select 博客名 , count(distinct convert(varchar(13),点击时间,120)) from A group by 博客名 where 博客名 not in (select 博客名 from b)--2.存在博客名的更新(进行累计)
update b set 累计点击 = 累计点击 + (select count(distinct convert(varchar(13),点击时间,120)) from A where 博客名 = b.博客名) from b
as
begin
--1.不存在博客名的先插入insert into b select 博客名 , count(distinct convert(varchar(13),点击时间,120)) from A group by 博客名 where 博客名 not in (select 博客名 from b)--2.存在博客名的更新(进行累计)
update b set 累计点击 = 累计点击 + (select count(distinct convert(varchar(13),点击时间,120)) from A where 博客名 = b.博客名) from bend
goexec my_proc