2014-09-24 38 views
0

我正在对我的原始网站分析数据进行一些分析,并尝试在我的网站上找到导致购买的共同到达路径。我已经迁移我的所有数据在一个整洁的工作台/以下脚本:Pathing Analysis网络数据

  1. [ORDER_ID]:非唯一VARCHAR(A1000,A1001等)
  2. [VISIT_IN_PATH]:数字(1,2,3,4 ,5等)
  3. [VISIT_REMAINING]:数字(1,2,3,4,5等)
  4. [CHANNEL]:VARCHAR(DIRECT /电子邮件/ DISPLAY /付费搜索/ FREE SEARCH)

我希望得到的是路径的计数,例如只使用ORDER_ID ABC123我可能会得到以下:

COUNT/VISIT_IN_PATH_1/VISIT_IN_PATH_2/VISIT_IN_PATH_3/VISIT_IN_PATH_4/VISIT_IN_PATH_5 1 /免费搜索/免费搜索/ DIRECT /免费搜索/ DIRECT

我非常新的SQL和我首先想到的是某种枢轴,但我接近这个方法的每一个方法,我都会一直靠在墙上,每一个可能性都必须定义。

当然有更好的方法吗?

CREATE TABLE [dbo].[DummyPaths](
            [ORDER_ID] [varchar](64) NULL, 
            [VISIT_IN_PATH] [bigint] NULL, 
            [VISIT_REMAINING] [bigint] NULL, 
            [MARKETING_CHANNEL] [varchar](256) NULL 
           ) 
GO 

INSERT INTO DummyPaths (ORDER_ID,VISIT_IN_PATH,VISIT_REMAINING,MARKETING_CHANNEL) 
VALUES  ('ABC123','1','5','FREE SEARCH'), 
      ('ABC123','2','4','FREE SEARCH'), 
      ('ABC123','3','3','DIRECT'), 
      ('ABC123','4','2','FREE SEARCH'), 
      ('ABC123','5','1','DIRECT'), 
      ('ABC124','1','5','OTHER REFERRAL'), 
      ('ABC124','2','4','OTHER REFERRAL'), 
      ('ABC124','3','3','OTHER REFERRAL'), 
      ('ABC124','4','2','OTHER REFERRAL'), 
      ('ABC124','5','1','OTHER REFERRAL'), 
      ('ABC125','1','5','DIRECT'), 
      ('ABC125','2','4','AFFILIATE'), 
      ('ABC125','3','3','AFFILIATE'), 
      ('ABC125','4','2','AFFILIATE'), 
      ('ABC125','5','1','AFFILIATE'), 
      ('ABC126','1','5','EMAIL'), 
      ('ABC126','2','4','EMAIL'), 
      ('ABC126','3','3','DIRECT'), 
      ('ABC126','4','2','DIRECT'), 
      ('ABC126','5','1','DIRECT'), 
      ('ABC127','1','5','FREE SEARCH'), 
      ('ABC127','2','4','DIRECT'), 
      ('ABC127','3','3','DIRECT'), 
      ('ABC127','4','2','FREE SEARCH'), 
      ('ABC127','5','1','DIRECT'), 
      ('ABC128','1','5','DIRECT'), 
      ('ABC128','2','4','EMAIL'), 
      ('ABC128','3','3','EMAIL'), 
      ('ABC128','4','2','EMAIL'), 
      ('ABC128','5','1','DIRECT'), 
      ('ABC129','1','5','FREE SEARCH'), 
      ('ABC129','2','4','FREE SEARCH'), 
      ('ABC129','3','3','FREE SEARCH'), 
      ('ABC129','4','2','FREE SEARCH'), 
      ('ABC129','5','1','DIRECT') 

我会非常感谢任何帮助。

感谢

回答

0

我一直在玩这个,发现了以下工作:

with  dataset 
as 
(
select ORDER_ID 
     ,[1] as 'VISIT1' 
     ,[2] as 'VISIT2' 
     ,[3] as 'VISIT3' 
     ,[4] as 'VISIT4' 
     ,[5] as 'VISIT5'     
from 
(
    select order_id, visit_in_path, MARKETING_CHANNEL 
    from dummypaths 
) x 
pivot 
(
    min(MARKETING_CHANNEL) 
    for visit_in_path in ([1], [2], [3], [4], [5]) 
) p 
) 


select  x.VISIT1 
      ,x.VISIT2 
      ,x.VISIT3 
      ,x.VISIT4 
      ,x.VISIT5 
      ,MAX(dupes) as 'count' 
from 
(
select  
      VISIT1 
      ,VISIT2 
      ,VISIT3 
      ,VISIT4 
      ,VISIT5 
      ,ROW_NUMBER() over 
          (partition by VISIT1 
              ,VISIT2 
              ,VISIT3 
              ,VISIT4 
              ,VISIT5 
          order by  VISIT1 asc 
          ) as 'dupes' 
from dataset 
) x 
group by x.VISIT1 
      ,x.VISIT2 
      ,x.VISIT3 
      ,x.VISIT4 
      ,x.VISIT5