我想創建一個新的列,填寫下麵的null。我試著使用領先和拖後但並不是正確的。基本上試圖找出是誰“擁有”的記錄,鑒於TransferFrom TransferTo列和事件序列。例如,35的記錄直到他們把57。我現在查詢隻會填充35記錄2,因為它隻會由一個記錄。我需要查詢填充所有記錄在此之前如果35 TransferFrom中發現的第一個值列。什麼好主意嗎?(順便說一句,我也試圖利用外部應用在SQL Server工作但不是由火花SQL)
創建表的腳本:
創建表的結果(OrderID int, TransferFrom字符串,TransferTo字符串,ActionTime時間戳)插入結果值(1空,空,2020-01-01就是),(1,空,空,2020-01-02就是),(1,空,空,2020-01-03就是),(1,“35”,“57”,“2020-01-04就是”),(1,空,空,2020-01-05就是),(1,空,空,2020-01-06就是),(1,“57”,“45”、“2020-01-07就是”),(1,空,空,2020-01-08就是),(1,空,空,2020-01-09就是),(1,空,空,2020-01-10就是)
目前查詢不工作:
SELECT *,合並(鉛(TransferFrom) /(分區由ActionTime OrderID秩序),TransferFrom,滯後(TransferTo) /(分區通過OrderID秩序ActionTime)) NewColumn從結果
當前查詢結果是不正確的:
所需的查詢結果:
這可能是次優的火花SQL,但是它讓我正確的答案。
從結果)與cte1 (select *, cte2作為(select * from cte1 TransferFrom不是null或TransferTo不是由ActionTime零訂單),cte3作為(選擇不同的OrderID TransferFrom從cte2聯盟選擇不同的OrderID團隊,TransferTo從cte2團隊),cte4(選擇一個。*,ifnull (timestampadd(微秒,1 c.ActionTime), 2000 - 01 - 01 - t00:00:00.000 + 0000”)作為開始時間,ifnull (b.ActionTime,“9999 - 12 - 31 t00:00:00.000 + 0000”)從cte3 EndTime作為左加入cte2 b上。OrderID = b。OrderID和。團隊= b。TransferFrom離開加入cte2 c上。OrderID = c。OrderID和。團隊= c。TransferTo order by OrderID、開始時間),cte5(選擇一個。*,b。團隊從cte1加入cte4 b上。OrderID = b。OrderID和。ActionTime b之間。開始時間和b。EndTime) select * from cte5訂單1,4