Başlangıç ve bitiş tarihlerini ayarlama sql
MS SQL Server 2016'da bir veri kümesi verildiğinde
StoreID PurchaseID ShopID LocationID Starttime Endtime
1020 20200102 9856 0010 2020-01-08 09:08:53 2020-01-08 09:11:52
1021 20200102 9856 0020 2020-01-08 09:09:48 2020-01-08 09:11:52
Burada StoreID birincil anahtardır. İlk kayıt bitiş zamanının değerini, sonraki ikinci kaydın başlangıç saatinde bulunan değere değiştirecek bir sorgu arıyorum. Kesin olmak gerekirse, konum kimliğinin her ikisi için de farklı olduğu Satın Alma Kimliği ve mağaza sahibi kimliği kombinasyonu için aynı gün gerçekleşen kayıtları aramam ve ardından sonraki kaydın başlangıç saatini alıp önceki satır bitiş saatindeki değeri güncellemem gerekiyor.
Not: Burada sadece iki örnek boyutu verdim, ancak veri kümemde yukarıdaki senaryolarla 2'den fazla var.
Sonuç setim şöyle olmalı:
StoreID PurchaseID ShopkID LocationID Starttime Endtime
1020 20200102 9856 0010 2020-01-08 09:08:53 2020-01-08 09:09:48
1021 20200102 9856 0020 2020-01-08 09:09:48 2020-01-08 09:11:52
Yanıtlar
Bir yaklaşım buna yakın bir şey olabilir, ancak bir alt seçim SET SQL kadar iyi performans göstermeyecektir:
UPDATE
T
SET
T.purchaseendtime =
(
SELECT TOP 1
purchasestarttime
FROM
TABLE_NAME T2
WHERE
T2.PurchaseStartTime > T.PurchaseStartTime
AND T2.PurchaseID = T.PurchaseID
AND T2.ShopkeeperID = T.ShopkeeperID
AND T2.LocationID <> T.LocationID
AND Convert(date, T2.PurchaseStartTime) = Convert(date, T.PurchaseStartTime)
ORDER BY
T2.PurchaseStarttime
)
FROM
TABLE_NAME T