全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SQL及关系型数据库数据分析
14829 10
2014-10-31
表结构:(字段为用户的交易记录:用户名称,交易时间)
userdate

10001

2014/6/1

10001

2014/9/1

10002

2014/5/20

10002

2014/7/1

10002

2014/8/1

10002

2014/9/1

10002

2014/9/12

10002

2014/9/16

10002

2014/9/30

10002

2014/10/21

10003

2014/9/1

10004

2014/9/1

10005

2014/9/1

10006

2014/6/1

10006

2014/8/21

10006

2014/9/1

10007

2014/6/15

10007

2014/6/21

10007

2014/8/30

10007

2014/9/1

10008

2014/9/1

10009

2014/7/4

10009

2014/8/15

10009

2014/9/1

10010

2014/9/1



如何用SQL语句实现:统计同一个用户,第一,二次成功购买的时间间隔天数.
多于两条交易记录的只需算第一次和第二次购买的时间间隔,只有一条交易记录的用户直接略去
最后查询希望得到的结果是:时间间隔天数=第二次交易时间-第一次交易时间
user购买间隔天数

10001

92

10002

42

10006

81

10007

6

10009

42

10010

92

10011

92

10012

42

10016

92

10017

6

10019

42

10020

92

10021

92

10022

21

10026

92

10029

42

10030

92

如果直接求不出来或比较麻烦,也可以是从数据表中取出同一用户前两条交易记录,最后查询的结果示例
userdate

10001

2014/6/1

10001

2014/9/1

10002

2014/5/20

10002

2014/7/1

10006

2014/6/1

10006

2014/8/21

10007

2014/6/15

10007

2014/6/21

10009

2014/7/4

10009

2014/8/15

或者这样的结果示例:
userdate

10001

2014/6/1

10001

2014/9/1

10002

2014/5/20

10002

2014/7/1

10003

2014/9/1

10004

2014/9/1

10005

2014/9/1

10006

2014/6/1

10006

2014/8/21

10007

2014/6/15

10007

2014/6/21

10008

2014/9/1

10009

2014/7/4

10009

2014/8/15

10010

2014/9/1

每个用户的交易数据条数没有规律,希望牛人指点啊,非常感谢
希望有牛人也可以提供下面这个问题的SQL语句,非常感谢
问题:数据表还是上表,求所有的间隔天数的SQL语句,即:如果一个用户有3条交易记录,间隔天数就有2个,第三次-第二次,第二次-第一次;如果一个用户只有1条记录,没有间隔天数,如果一个用户5条记录,4个间隔天数。






二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2015-1-17 18:53:15
使用row_number即可
我用sql server写了一个 你看看ok不?
select A.[user],
DATEDIFF( Day,A.[date],B.[date]) as interval
from
( SELECT [user]
      ,[date]
      , ROW_NUMBER() over(partition by [user] order by [date] asc) as num
FROM [test].[dbo].[Table1] ) A
left outer join
(SELECT [user]
      ,[date]
      , ROW_NUMBER() over(partition by [user] order by [date] asc) as num
FROM [test].[dbo].[Table1] ) B
on A.[user]=B.[user]
where A.num=1
and B.num=2
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-3-17 16:46:35
谢谢
这个代码只能求第一次和第二次之间的间隔,每个会员的购买次数是不均等的,不能一次性全求出来吗?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-7-6 15:41:42
brown10 发表于 2015-1-17 18:53
使用row_number即可
我用sql server写了一个 你看看ok不?
select A.,
我也在面临同样的难题,我试了您的SQL,可是不知道为什么,我的数据库显示cann't support,可能不支持rou_number和join同时使用吧,不知道还有没有其他的办法可以求出来??恳请赐教!!

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-8-12 10:32:14
create table card_PurchaseInterval as
select
a.card_num,
DATEDIFF(a.day,b.day) as interval
from
(select
card_num,day,
row_number() over(partition by (card_num) order by day asc) as num
from
user.Larage_Table
where length(card_num)=16 and card_num like '9%' ) a
left outer join
(select
card_num,day,
row_number() over(partition by (card_num) order by day asc) as num
from
user.Larage_Table
where length(card_num)=16 and card_num like '9%') b
on
a.card_num=b.card_num
where a.card_num=1 and b.card_num=2
各位帮忙看看,为什么去出来的数为0行呢
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-11-22 10:44:57
SELECT ACC_NBR ,LOGIN_TIME ,rn = ROW_NUMBER()OVER(PARTITION BY ACC_NBR ORDER BY LOGIN_TIME)
INTO #temp_behavior
FROM ECH_LLS.dbo.TM_MOBILE_LOGIN_201604

SELECT a.ACC_NBR,datediff(MINUTE,a.LOGIN_TIME,b.LOGIN_TIME)AS 时间间隔
FROM #temp_behavior a,#temp_behavior b
WHERE a.ACC_NBR = b.ACC_NBR AND a.rn + 1 = b.rn  
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群