level 4
如题:
一个表的字段:用户,付款时间,付款金额
提问:查询最近30天内,用户连续三天付款的信息。怎么写啊
2021年06月04日 10点06分
1
level 4
没具体字段的,我面试的时候没写出来。只想得到最大时间用max,然后用curre_date(max(付款时间),day30)求出间隔的日期,但是剩下的怎么写,就不知道了
2021年06月04日 10点06分
2
level 1
这个好写啊,lead和lag分析函数用过吗。先where,付款时间> sysdate-30,再 group by 用户,然后取每个用户前一天和后一天的money,再加上当天的money,这三个条件且的关系都大于0不就好了。就ok了。
2021年06月04日 14点06分
3
但是这里怎么体现连续三天呢
2021年06月04日 22点06分
level 8
连续3天最简单的方法根据
select DISTINCT 用户,付款时间(改成date形) into 一个临时表#temp
这样做是为了防止一天多次付款的数据出现导致逻辑出错。
然后根据临时表#temp子查询自己#temp并且BETWEEN 付款时间 AND 付款时间+2天 and 付款时间 >今天前30天
的出来的数据 就是你要的数据了。
2021年06月07日 08点06分
5
这种是套两层对吧?
2021年06月07日 14点06分
@烟火的回忆free 一个子查询就可以或者EXISTS。做临时表就不用套层了。你套层也可以。但是这样EXISTS的数据就又需要套层
2021年06月08日 00点06分