mysql,统计出两个月连续活跃的用户

mysql,统计出两个月连续活跃的用户,第1张

首先我们需要明白SQL语言的局限,它属于面向集合的描述性语言,该语言无法在记录间进行浏览定位,因此涉及需要进行不同记录间进行比较的问题时,它会很无力。题主这类问题最好交由应用程序端用编程的方法解决,而在数据库端单纯用SQL语言解决则会相当麻烦和低效,很多时候甚至是无解的。

下面就题主的问题尝试用纯SQL查询来实现,请参考系列实验:

-- 创建测试表并插入测试数据

DROP TABLE IF EXISTS TEST

CREATE TABLE TEST (USERID VARCHAR(10),MONTHID INT)

INSERT INTO TEST VALUES

('10001',1),('10002',3),('10003',2),('10002',4),

('10002',3),('10001',2),('10001',3),('10002',12)

-- 查看测试数据

SELECT * FROM  TEST

-- 筛选出曾经连续活跃2个月和3个月的用户ID

SELECT T.USERID,

CASE WHEN MAX(T.DIFF1)=1 THEN '是' ELSE '否' END AS 连续活跃两月,

CASE WHEN MAX(T.DIFF2)=2 THEN '是' ELSE '否' END AS 连续活跃三月

FROM (SELECT A.*,

(A.MONTHID-(SELECT MAX(MONTHID) FROM TEST WHERE

USERID=A.USERID AND MONTHID<A.MONTHID))

AS DIFF1,

(A.MONTHID-(SELECT MAX(MONTHID) FROM TEST WHERE

USERID=A.USERID AND

MONTHID<(SELECT MAX(MONTHID) FROM TEST WHERE

USERID=A.USERID AND MONTHID<A.MONTHID))) AS DIFF2 FROM TEST A) T

WHERE T.DIFF1=1 OR T.DIFF2=2 GROUP BY T.USERID

DROP TABLE IF EXISTS TEST -- 删除测试表

实验截图

输出效果

<?php

$conn=mysql_connect("localhost","root","")or die("数据库服务器连接错误".mysql_error())

mysql_select_db("test",$conn)or die("数据库访问错误".mysql_error())

mysql_query("set names gb2312")

$stime = $yesterday = date('Y-m-d H:i:s',strtotime('-60 day'))

$etime = date('Y-m-d H:i:s')

$sql = "SELECT * FROM biao1 WHERE addtime>={$stime } AND addtime<={$etime} "

."ORDER BY addtime DESC "

$query = mysql_query($sql)

while($row = mysql_fetch_array($query))

{

echo '<pre>'

print_r($row)

}

?>


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7133153.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-02
下一篇 2023-04-02

发表评论

登录后才能评论

评论列表(0条)

保存