123
返回列表 发新帖
楼主: 胡作飛为

[SQL] 计算连续签到天数

[复制链接]
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
21#
发表于 2022-8-29 21:39 | 只看该作者
楼上的SQL技巧很熟练了,要不要写个大数据量的测试用例比较一下几种方法的性能?

使用道具 举报

回复
论坛徽章:
18
优秀写手
日期:2014-02-27 06:00:13秀才
日期:2017-12-12 09:52:44秀才
日期:2017-08-11 15:37:32弗兰奇
日期:2017-07-04 09:16:01秀才
日期:2017-06-29 10:16:48乌索普
日期:2017-05-26 08:58:24娜美
日期:2017-05-18 16:07:23ITPUB15周年纪念
日期:2017-05-02 15:22:36妮可·罗宾
日期:2017-04-06 10:06:19处女座
日期:2016-03-10 09:03:26
22#
发表于 2022-9-8 13:11 | 只看该作者
newkid 发表于 2022-8-29 21:39
楼上的SQL技巧很熟练了,要不要写个大数据量的测试用例比较一下几种方法的性能?

大概可以猜得到,如果表有RN列且是主键,肯定是cte快,否则的话model快。 没有12c以上的环境,测试不了新语法。现在都信创了,更不敢用新语法了,model都不能用了。

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
23#
发表于 2022-9-8 22:23 | 只看该作者
用国产数据库就是信创吗?在ORACLE优化器面前,它们都是弱鸡。这本来是SQL人大显身手的时刻,比如我本来没用过PG, 但是看它的执行计划也能猜个八九不离十,还能指导其他项目组改写来提高性能。但是现在有些公司却因此推出一些奇怪的开发规范,比如表连接不能超过三张之类,实在令人无语!

使用道具 举报

回复
论坛徽章:
1
娜美
日期:2022-09-24 21:10:49
24#
发表于 2022-9-10 00:21 | 只看该作者
/*
本人菜鸟一枚想到这样一个办法:可以把截止当前行 0 出现的次数作为分组的依据,然后组内进行累加
代码如下:  其中的group_flag就是截止当前行sign_In=0出现的次数
*/
WITH T AS (
    SELECT '2022-01-01' AS DT, 1 AS SIGN_IN FROM DUAL UNION
    SELECT '2022-01-02' AS DT, 1 AS SIGN_IN FROM DUAL UNION
    SELECT '2022-01-03' AS DT, 1 AS SIGN_IN FROM DUAL UNION
    SELECT '2022-01-04' AS DT, 0 AS SIGN_IN FROM DUAL UNION
    SELECT '2022-01-05' AS DT, 1 AS SIGN_IN FROM DUAL UNION
    SELECT '2022-01-06' AS DT, 0 AS SIGN_IN FROM DUAL UNION
    SELECT '2022-01-07' AS DT, 1 AS SIGN_IN FROM DUAL UNION
    SELECT '2022-01-08' AS DT, 1 AS SIGN_IN FROM DUAL UNION
    SELECT '2022-01-09' AS DT, 1 AS SIGN_IN FROM DUAL UNION
    SELECT '2022-01-10' AS DT, 1 AS SIGN_IN FROM DUAL UNION
    SELECT '2022-01-11' AS DT, 1 AS SIGN_IN FROM DUAL UNION
    SELECT '2022-01-12' AS DT, 1 AS SIGN_IN FROM DUAL UNION
    SELECT '2022-01-13' AS DT, 0 AS SIGN_IN FROM DUAL UNION
    SELECT '2022-01-14' AS DT, 0 AS SIGN_IN FROM DUAL UNION
    SELECT '2022-01-15' AS DT, 1 AS SIGN_IN FROM DUAL UNION
    SELECT '2022-01-16' AS DT, 1 AS SIGN_IN FROM DUAL UNION
    SELECT '2022-01-17' AS DT, 1 AS SIGN_IN FROM DUAL UNION
    SELECT '2022-01-18' AS DT, 1 AS SIGN_IN FROM DUAL
)
,T1 AS (SELECT T.*,COUNT(DECODE(T.SIGN_IN,0,1)) OVER (ORDER BY DT) GROUP_FLAG FROM T)
SELECT T1.DT,T1.SIGN_IN,SUM(SIGN_IN) OVER (PARTITION BY GROUP_FLAG ORDER BY T1.DT) 连续签到  FROM T1;

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
25#
发表于 2022-9-10 04:11 | 只看该作者
theshy 发表于 2022-9-10 00:21
/*本人菜鸟一枚想到这样一个办法:可以把截止当前行 0 出现的次数作为分组的依据,然后组内进行累加 代码如 ...

这个方法可以的,我以前也用过:
http://www.itpub.net/thread-1223937-1-1.html

使用道具 举报

回复
论坛徽章:
1
娜美
日期:2022-09-24 21:10:49
26#
发表于 2022-9-11 12:01 | 只看该作者
newkid 发表于 2022-9-10 04:11
这个方法可以的,我以前也用过:http://www.itpub.net/thread-1223937-1-1.html

苏神回我帖子了,好开心啊

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
27#
发表于 2022-9-11 21:45 | 只看该作者
theshy 发表于 2022-9-11 12:01
苏神回我帖子了,好开心啊

希望以后多来陪广场舞大爷玩。

使用道具 举报

回复
论坛徽章:
18
优秀写手
日期:2014-02-27 06:00:13秀才
日期:2017-12-12 09:52:44秀才
日期:2017-08-11 15:37:32弗兰奇
日期:2017-07-04 09:16:01秀才
日期:2017-06-29 10:16:48乌索普
日期:2017-05-26 08:58:24娜美
日期:2017-05-18 16:07:23ITPUB15周年纪念
日期:2017-05-02 15:22:36妮可·罗宾
日期:2017-04-06 10:06:19处女座
日期:2016-03-10 09:03:26
28#
发表于 2022-9-20 00:02 | 只看该作者
newkid 发表于 2022-9-8 22:23
用国产数据库就是信创吗?在ORACLE优化器面前,它们都是弱鸡。这本来是SQL人大显身手的时刻,比如我本来没 ...

怕被制裁,国内是大势所趋了。 都在上信创

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表