V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  zhuangjia  ›  全部回复第 28 页 / 共 42 页
回复总数  827
1 ... 24  25  26  27  28  29  30  31  32  33 ... 42  
2021-03-09 13:47:46 +08:00
回复了 bwd1991 创建的主题 数据库 sql 统计一段时间内巡检次数 7 天内的不重复计算
@zhuangjia 尴尬,忘了回复不支持 markdown,这个格式看着愁人
2021-03-09 13:44:49 +08:00
回复了 bwd1991 创建的主题 数据库 sql 统计一段时间内巡检次数 7 天内的不重复计算
借鉴了 MySQL 统计连续登录天数的思路和 sql,主要是这篇: https://zhuanlan.zhihu.com/p/32613190

生成测试数据

```
# 创建测试表
CREATE TABLE `tmp_test_lianxu_3` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`DeviceID` int(11) DEFAULT NULL,
`CreateTime` datetime DEFAULT NULL COMMENT '登录时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

# 生成测试数据

INSERT INTO `test`.`tmp_test_lianxu_3` (`id`, `DeviceID`, `CreateTime`) VALUES ('1', '1', '2014-01-01 21:00:00');
INSERT INTO `test`.`tmp_test_lianxu_3` (`id`, `DeviceID`, `CreateTime`) VALUES ('2', '1', '2014-01-02 15:37:57');
INSERT INTO `test`.`tmp_test_lianxu_3` (`id`, `DeviceID`, `CreateTime`) VALUES ('3', '2', '2014-01-01 09:00:00');
INSERT INTO `test`.`tmp_test_lianxu_3` (`id`, `DeviceID`, `CreateTime`) VALUES ('4', '2', '2014-01-02 09:00:00');
INSERT INTO `test`.`tmp_test_lianxu_3` (`id`, `DeviceID`, `CreateTime`) VALUES ('5', '1', '2014-01-04 10:00:00');
INSERT INTO `test`.`tmp_test_lianxu_3` (`id`, `DeviceID`, `CreateTime`) VALUES ('6', '1', '2014-01-05 12:00:00');
INSERT INTO `test`.`tmp_test_lianxu_3` (`id`, `DeviceID`, `CreateTime`) VALUES ('7', '2', '2014-01-10 00:00:00');
INSERT INTO `test`.`tmp_test_lianxu_3` (`id`, `DeviceID`, `CreateTime`) VALUES ('8', '2', '2014-01-11 13:00:00');
INSERT INTO `test`.`tmp_test_lianxu_3` (`id`, `DeviceID`, `CreateTime`) VALUES ('10', '2', '2014-01-12 12:00:00');
INSERT INTO `test`.`tmp_test_lianxu_3` (`id`, `DeviceID`, `CreateTime`) VALUES ('11', '1', '2014-01-08 06:00:00');
INSERT INTO `test`.`tmp_test_lianxu_3` (`id`, `DeviceID`, `CreateTime`) VALUES ('12', '2', '2014-01-11 21:00:00');
INSERT INTO `test`.`tmp_test_lianxu_3` (`id`, `DeviceID`, `CreateTime`) VALUES ('13', '2', '2014-01-15 21:00:00');
INSERT INTO `test`.`tmp_test_lianxu_3` (`id`, `DeviceID`, `CreateTime`) VALUES ('14', '2', '2014-01-17 21:00:00');
INSERT INTO `test`.`tmp_test_lianxu_3` (`id`, `DeviceID`, `CreateTime`) VALUES ('15', '2', '2014-01-19 21:00:00');
INSERT INTO `test`.`tmp_test_lianxu_3` (`id`, `DeviceID`, `CreateTime`) VALUES ('16', '2', '2014-01-21 21:00:00');
INSERT INTO `test`.`tmp_test_lianxu_3` (`id`, `DeviceID`, `CreateTime`) VALUES ('17', '2', '2014-01-26 21:00:00');
INSERT INTO `test`.`tmp_test_lianxu_3` (`id`, `DeviceID`, `CreateTime`) VALUES ('18', '2', '2014-01-28 21:00:00');
INSERT INTO `test`.`tmp_test_lianxu_3` (`id`, `DeviceID`, `CreateTime`) VALUES ('19', '2', '2014-01-30 21:00:00');
INSERT INTO `test`.`tmp_test_lianxu_3` (`id`, `DeviceID`, `CreateTime`) VALUES ('20', '2', '2014-02-16 21:00:00');
INSERT INTO `test`.`tmp_test_lianxu_3` (`id`, `DeviceID`, `CreateTime`) VALUES ('21', '2', '2014-02-13 21:00:00');

```


sql 语句如下

```
SELECT
DeviceID,
# 检查每次巡检记录,如果最近一次巡检时间是 7 天前,那么有效巡检天数+1 ;如果是 7 天内,有效巡检天数+0 ;否则设置为 1
@cont_day := ( CASE
WHEN ( DATEDIFF(login_dt, @real_last_dt) > 7 ) THEN (@cont_day + 1)
WHEN ( DATEDIFF(login_dt, @real_last_dt) <= 7 ) THEN (@cont_day + 0)
ELSE 1
END
) AS days,
@last_did := DeviceID,
# 判断当前巡检是否为有效巡检(间隔 7 天),是则更新最后有效巡检时间;
# 如果不是则判断是否存在最后有效巡检时间,存在则不变,不存在则设置未当前巡检时间
@real_last_dt := ( CASE
WHEN ( DATEDIFF(login_dt, @real_last_dt) > 7 ) THEN login_dt
WHEN ( @real_last_dt > 0 ) THEN @real_last_dt
ELSE @last_dt
END
) as last_dt,
@last_dt := login_dt
FROM
( SELECT DeviceID, DATE(CreateTime) AS login_dt FROM tmp_test_lianxu_3
WHERE DeviceID=2 AND CreateTime BETWEEN "2014-01-01" AND "2014-01-31"
ORDER BY DeviceID, CreateTime ) AS t,
( SELECT @last_did := '', @last_dt := '', @real_last_dt := '', @cont_day := 0 ) AS t1

```

执行后结果如下:(其中 days 即为有效巡检天数)


DeviceID|days|@last_did := DeviceID|last_dt|@last_dt := login_dt
---|---|---|---|---
2|1|2||2014/1/1
2|1|2|2014/1/1|2014/1/2
2|2|2|2014/1/10|2014/1/10
2|2|2|2014/1/10|2014/1/11
2|2|2|2014/1/10|2014/1/11
2|2|2|2014/1/10|2014/1/12
2|2|2|2014/1/10|2014/1/15
2|2|2|2014/1/10|2014/1/17
2|3|2|2014/1/19|2014/1/19
2|3|2|2014/1/19|2014/1/21
2|3|2|2014/1/19|2014/1/26
2|4|2|2014/1/28|2014/1/28
2|4|2|2014/1/28|2014/1/30
2021-03-05 10:14:43 +08:00
回复了 waiaan 创建的主题 问与答 element ui 有没有办法实现冻结行的功能?
如果你是想要同时固定列和表头的话,它是支持的
https://element.eleme.cn/#/zh-CN/component/table#gu-ding-lie-he-biao-tou
2021-03-04 10:07:42 +08:00
回复了 wenguangfe 创建的主题 程序员 在试用了各种阅读模式以后,我决定自己开发一个!
试用了,挺好用的。
2021-03-04 09:56:26 +08:00
回复了 zhoudaiyu 创建的主题 程序员 问问大家关于软考的一些事
看了这个贴,昨天下单了《系统分析师》
2021-03-03 17:04:53 +08:00
回复了 zhoudaiyu 创建的主题 程序员 问问大家关于软考的一些事
考了不吃亏
2021-03-01 10:50:32 +08:00
回复了 woshipanghu 创建的主题 程序员 这几天你们的阿里云服务器还好吗?
又挂了……要提工单了
2021-03-01 10:16:21 +08:00
回复了 woshipanghu 创建的主题 程序员 这几天你们的阿里云服务器还好吗?
周末挂了三次……
2021-02-26 10:56:21 +08:00
回复了 rakuking 创建的主题 问与答 各位基友们,今天你们还加仓吗?
已加
2021-02-26 10:53:40 +08:00
回复了 James369 创建的主题 问与答 应该有不少牙周炎的朋友,有没有必要去做手术治疗?
牙周炎,去年做的龈下刮治加龈上洁治(洗牙)。流程、价格和 15 楼差不多,建议做,做完真很明显的轻松感,口气也清新了。

牙龈萎缩是牙结石和牙周炎导致的,不管你做不做都已经萎缩了。清除掉牙结石才会慢慢恢复。
2021-02-24 18:22:07 +08:00
回复了 ofoerssdsdsdsd 创建的主题 Apple 有 Mac 尸体吗? 收个屏幕,被狗咬了
狗怎么样了
2021-02-24 09:45:55 +08:00
回复了 AllenHua 创建的主题 分享发现 第十个国家中心城市将会花落谁家?
武汉:全国重要的工业基地、科教基地和综合交通枢纽
郑州:国家重要的综合交通枢纽
2021-02-23 11:50:05 +08:00
回复了 puduhe1 创建的主题 分享发现 阿里抄袭自记账,证据二
关注
2021-02-22 11:32:28 +08:00
回复了 chevalier 创建的主题 程序员 大家都订阅了哪些技术邮件?
顺便问下订阅了会每天都看吗?
2021-02-20 11:21:28 +08:00
回复了 wolfz 创建的主题 问与答 你们相亲都碰见过什么沙雕任务
@zhuangjia 可能在相亲中我就是那个沙雕……
1 ... 24  25  26  27  28  29  30  31  32  33 ... 42  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1245 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 32ms · UTC 17:35 · PVG 01:35 · LAX 09:35 · JFK 12:35
Developed with CodeLauncher
♥ Do have faith in what you're doing.