这应该很容易但是我遇到了各种各样的麻烦,试图弄清楚这个。这里我有以下字段Store ID,Person_id,type_id,Type,created_at,start_date。
商店ID Person_id type_id类型created_at start_date
13458 11146402 1报告12/18/07 2:39 PM 12/18/2007
13458 11146402 6接受3/14/08 7:15 PM 3/14/2008
13458 11146402 7月4/3/08 5:18 PM 4/3/2008
13458 11146402 1报告4/3/08 6:36 PM 4/3/2008
13458 11146402 3评论4/3/08 6:36 PM 4/3/2008
13458 11146402 7 12/9/09关闭2009年12月9日上午5:00
13458 11146402 1报告2/3/10 8:54 PM 2/3/2010
13458 11146402 3评论2/3/10 8:54 PM 2/3/2010
13458 11146402 9 Preclosed 11/18/10 8:54 PM 11/18/2010
13458 11146402 7已关闭11/18/10 8:54 PM 11/18/2010
13458 11146402 3 Review 16/6/16 4:34 PM 4/7/2011
13458 11146402 7 2016年6月16日下午4:34关闭
13458 11146402 1报告2/3/10 8:54 PM 2/3/2010
13458 11146402 3评论11/18/17 8:54 PM 2/3/2017
13458 11146402 10已完成11/18/17 8:54 PM 11/18/2017
13458 11146402 7关闭11/18/17 8:54 PM 02/18/2018
13458 11146402 1报告2/3/10 8:54 AM 2/3/2010
13458 11146402 3评论2/3/10 1:54 PM 2/3/2010
13458 11146402 7已关闭2/3/10 4:54 PM 2/3/2010
注意:
同一个商店我和同一个人我有不同的场景。在这里,我需要所有源类型='已关闭'但他们以前的type_id应该是(3,9,10)。只是一个FYI ...... type_id = 1是相应剧集的开头,type = 7是相应剧集的结尾,可能有些情况下它可能不是以type_id = 1开头但可能直接用(3,9,10)然后用type_id = 7关闭。如果它以type_id = 1结束并以type_id = 7结束,我们还需要删除24小时内。
这是我试过的查询:
;关闭为(
SELECT *,ROW_NUMBER()OVER(PARTITION BY store_id,person_id ORDER BY created_at)N
FROM#Temp_P1_SK
WHERE type_id = 7
)
SELECT c.store_id,c.person_id,c.type_id,c.created_at,c.startdate,P.type_id AS P_type_id
FROM closed c
LEFT JOIN关闭c.store_id = p.store_id和c.person_id = p.person_id和c.N = p.N + 1
注意:这里我们不能采用最小类型id,因为它们没有按顺序分配。即使我们也不能创建最少的创建日期,因为他们可以创建所有一次并将开始日期回溯到它们各自的发生日期。此示例的最终输出应为四个记录,源类型='已关闭'与他们各自的剧集开始日期的开始日期
最终输出:
商店ID Person_id type_id类型Pre_type_id Pre_Type start_date Pre_start_date
13458 11146402 7已关闭3评论12/9/2009 4/3/2008
13458 11146402 7已关闭9预关闭11/18/2010 11/18/2010
13458 11146402 7已关闭3评论6/13/2016 4/7/2011
13458 11146402 7已结束10已完成02/18/2018 11/18/2017