ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 843|回复: 9

[求助] SQL面试题,求时间间隔内访问ID及其明细

[复制链接]

TA的精华主题

TA的得分主题

发表于 2021-5-31 14:55 | 显示全部楼层 |阅读模式
数据分析|SQL面试题—间隔问题
由于数据大,最好能用SQL
求在时间间隔10天内访问3次以上的ID和具体的到访时间
比如第一个客户,在114天,116天,122天访问了,刚好在10天间隔内
第二个客户在第96,99,100天访问了,刚好也在10天内,也符合要求

我查了一下,一个字段之间的间隔,暂时没有找到相关函数,难道要用DATEDIF()? 间隔问题.rar (19.39 KB, 下载次数: 13)

还请大家指点下,谢谢!

TA的精华主题

TA的得分主题

发表于 2021-5-31 15:07 | 显示全部楼层
WHERE Date_Column > date AND Date_Column < date

TA的精华主题

TA的得分主题

发表于 2021-5-31 15:46 来自手机 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-5-31 16:35 | 显示全部楼层
marchwen01 发表于 2021-5-31 15:07
WHERE Date_Column > date AND Date_Column < date

没有体现10天内,3次以上
谢谢你!

TA的精华主题

TA的得分主题

发表于 2021-5-31 16:42 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 marchwen01 于 2021-5-31 16:55 编辑
xuzong 发表于 2021-5-31 16:35
没有体现10天内,3次以上
谢谢你!


刚没看附件,搞错了。

TA的精华主题

TA的得分主题

发表于 2021-5-31 18:24 | 显示全部楼层
本帖最后由 zpy2 于 2021-5-31 21:27 编辑

感觉有点烧脑。。。
WITH RECURSIVE 父(行,客户ID,访问时间第几天,父访问时间第几天,时间间隔) AS ( select min(rowid) 行,客户ID,访问时间第几天,1000 父访问时间第几天,1000-访问时间第几天 时间间隔 from 客户访问时间明细表 group by 客户ID UNION SELECT 子.rowid,子.客户ID,子.访问时间第几天,父.访问时间第几天,子.访问时间第几天-父.访问时间第几天 FROM 客户访问时间明细表 子 JOIN 父 ON 子.客户ID=父.客户ID and cast(子.访问时间第几天 as integer)>cast(父.访问时间第几天 as integer)) select *,count(*),group_concat(访问时间第几天) from 父 where 时间间隔<10 group by 客户ID,父访问时间第几天 having count(*)>2 limit 300
客户ID访问时间第几天父访问时间第几天时间间隔count(*)group_concat(访问时间第几天)
3773413712983135,136,137
53417717073175,176,177
5144814513693137,139,145
7026796888389,93,96
89717716893175,176,177
90718117563176,177,181

超级截屏_20210531_182259.png

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2021-5-31 18:56 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
用函数或者vba倒是挺简单的

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-6-1 08:46 | 显示全部楼层
zpy2 发表于 2021-5-31 18:24
感觉有点烧脑。。。
WITH RECURSIVE 父(行,客户ID,访问时间第几天,父访问时间第几天,时间间隔) AS ( selec ...

这个面试题还真不容易,我看得都很吃力,感谢关注!

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-6-1 08:47 | 显示全部楼层
jiangxiaoyun 发表于 2021-5-31 18:56
用函数或者vba倒是挺简单的

数量少是可以用VBA,访问数据太多,只能用SQL

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-6-1 11:55 | 显示全部楼层
Sub 统计间隔()
    Dim Conn As Object, Rst As Object
    Dim strConn As String, strSQL As String
    Dim i As Integer, PathStr As String
    Set Conn = CreateObject("ADODB.Connection")
    Set Rst = CreateObject("ADODB.Recordset")
    PathStr = ThisWorkbook.FullName   '设置工作簿的完整路径和名称
    Select Case Application.Version * 1    '设置连接字符串,根据版本创建连接
    Case Is <= 11
        strConn = "Provider=Microsoft.Jet.Oledb.4.0;Extended Properties=excel 8.0;Data source=" & PathStr
    Case Is >= 12
        strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & PathStr & ";Extended Properties=""Excel 12.0;HDR=YES"";"""
    End Select
    Conn.Open strConn    '打开数据库链接
   
strSQL = "Select * From [数据$]a ,[数据$]b where a.客户=b.客户 and b.时间-a.时间<10and b.时间 > a.时间" '
    Set Rst = Conn.Execute(strSQL)    '执行查询,并将结果输出到记录集对象
    With Worksheets(2)
        .Cells.Clear
        For i = 0 To Rst.Fields.Count - 1    '填写标题
            .Cells(1, i + 1) = Rst.Fields(i).Name
        Next i
        .Range("A2").CopyFromRecordset Rst

    End With
    Rst.Close    '关闭数据库连接
    Conn.Close
    Set Conn = Nothing
    Set Rst = Nothing
End Sub



采用别名可以达到预期目标,目前只差访问3次以上的ID和具体的到访时间,继续努力
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-22 01:47 , Processed in 0.041438 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表