还是计算老用户和活跃用户的问题

堕落的唐僧 2014-04-15 11:49:29
老用户就是创建时间不是分析当天的,但是当天有访问过业务的用户
比如表A
ID USERNAME TIME 老用户
1 aa 2014.1.1
2 bb 2014.1.1
3 cc 2014.1.1 0
4 aa 2014.1.2
5 bb 2014.1.2 2
6 aa 2014.1.3
7 dd 2014.1.3 1
8 aa 2014.1.4
9 bb 2014.1.4 2

最后输出展现当天的结果 老用户 TIME
2 今天

还有个问题前面其他帖子我也问了,但是感觉还是没搞明白,7天活跃度的问题。
http://bbs.csdn.net/topics/390759879?page=1#post-397183749
结果呈现希望也是 活跃用户 TIME
1 今天


...全文
229 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
堕落的唐僧 2014-04-15
  • 打赏
  • 举报
回复
引用 2 楼 fredrickhu 的回复:
哪个是 创建时间?
TIME就是创建时间
--小F-- 2014-04-15
  • 打赏
  • 举报
回复
哪个是 创建时间?
--小F-- 2014-04-15
  • 打赏
  • 举报
回复
没明白什么意思。
yoan2014 2014-04-15
  • 打赏
  • 举报
回复
引用 7 楼 u013794332 的回复:
[quote=引用 6 楼 yoan2014 的回复:] 上一个帖子已经有算好老用户这个栏位的值,你想要哪一天的就在那基础上加上 where time1 = 你所要的日期,如果是当天的话你就用 where time1 = convert(date,getdate())就可以了 之前已经得出结果了,接下来你只是要取某一天的其中一条数据时,你只要在之前的结果上通过where条件来筛选你需要的即可
嗯,这个老用户的问题你会算吗[/quote]
IF EXISTS(SELECT NAME FROM sys.objects AS o WHERE NAME = 'test')
    DROP TABLE test
GO
CREATE TABLE test(id INT IDENTITY , username VARCHAR(02) , time1 DATE )
GO
INSERT INTO test 
SELECT 'aa' , '2014.1.1' UNION ALL
SELECT 'bb' , '2014.1.1' UNION ALL
SELECT 'cc' , '2014.1.1' UNION ALL
SELECT 'aa' , '2014.1.2' UNION ALL
SELECT 'bb' , '2014.1.2' UNION ALL
SELECT 'aa' , '2014.1.3' UNION ALL
SELECT 'dd' , '2014.1.3' UNION ALL
SELECT 'aa' , '2014.1.4' UNION ALL
SELECT 'bb' , '2014.1.4' 
 
 
--print dateadd(dayofyear,-7, getdate() )
SELECT a.TIME1,
       (
           SELECT COUNT(1)
           FROM   (
                      SELECT username
                      FROM   test AS b
                      WHERE  b.time1 = a.time1
                             AND username IN (SELECT d.username
                                              FROM   test AS d
                                              WHERE  d.time1 < a.time1)
                      GROUP BY
                             b.username
                  ) AS d
       ) AS 老用户
FROM   test AS a
--WHERE time1 = CONVERT(DATE , GETDATE()) --如果要取当天的加上这个条件
GROUP BY
       a.time1
        
------------结果
TIME1      老用户
---------- -----------
2014-01-01 0
2014-01-02 2
2014-01-03 1
2014-01-04 2

(4 row(s) affected)
你理解一下为什么这么写,其实就是上个帖子将条件稍微改一改
a403648224 2014-04-15
  • 打赏
  • 举报
回复
select sum(老用户),TIME from A where 老用户=‘2014.1.4’ GROUP by TIME 这个应该是你想要的结果!
堕落的唐僧 2014-04-15
  • 打赏
  • 举报
回复
引用 6 楼 yoan2014 的回复:
上一个帖子已经有算好老用户这个栏位的值,你想要哪一天的就在那基础上加上 where time1 = 你所要的日期,如果是当天的话你就用 where time1 = convert(date,getdate())就可以了 之前已经得出结果了,接下来你只是要取某一天的其中一条数据时,你只要在之前的结果上通过where条件来筛选你需要的即可
嗯,这个老用户的问题你会算吗
yoan2014 2014-04-15
  • 打赏
  • 举报
回复
上一个帖子已经有算好老用户这个栏位的值,你想要哪一天的就在那基础上加上 where time1 = 你所要的日期,如果是当天的话你就用 where time1 = convert(date,getdate())就可以了 之前已经得出结果了,接下来你只是要取某一天的其中一条数据时,你只要在之前的结果上通过where条件来筛选你需要的即可
堕落的唐僧 2014-04-15
  • 打赏
  • 举报
回复
比如表A ID USERNAME TIME 老用户 1 aa 2014.1.1 2 bb 2014.1.1 3 cc 2014.1.1 0 4 aa 2014.1.2 5 bb 2014.1.2 2 6 aa 2014.1.3 7 dd 2014.1.3 1 8 aa 2014.1.4 9 bb 2014.1.4 2 最后输出展现当天的结果 老用户 TIME 2 2014.1.4
KeepSayingNo 2014-04-15
  • 打赏
  • 举报
回复
你举例不要说当天,因为别人也不清楚你的当天是哪一天,你可以想办法再把你的问题描述一遍,别人真的无法看懂

34,874

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧