[英]Update a column based on ordered values from another table
當相關表 SoldItems 具有相同的唯一標識符時,我需要更新名為 AccountBase 的表中的標志,但困難的部分是,我需要找到最新銷售的產品並將其 SellDatetime 與當前時間進行比較。 當 6 年內售出的最新產品時,我想將標志設置為 1,否則設置為 0。
AccountBase 和SoldItems 之間是1:N 的連接,多個物品可以賣給一個帳戶,所以我需要在SoldItems 中通過SellDatetime 訂購。
這是我的嘗試,它沒有正確設置,但存在的內部查詢返回正確的值:
UPDATE acc
SET acc.SoldInLastSixYears = CASE WHEN DATEDIFF(DAY, hk.SellDatetime, GETDATE())/ 365.2425 >= 6 THEN 0
ELSE 1
END
FROM [AccountBase] acc INNER JOIN SoldItems hk ON acc.AccountId=hk.Owner
where EXISTS(select top(1) SellDatetime From SoldItems where
SellDatetime is not null AND Owner is not null
AND Owner=acc.AccountId order by SellDatetime desc)
當我嘗試使用內部查詢值時,出現錯誤我 sql 沒有識別“hk”:
UPDATE acc
SET acc.SoldInLastSixYears = CASE WHEN DATEDIFF(DAY, hk.SellDatetime, GETDATE())/ 365.2425 >= 6 THEN 0
ELSE 1
END
FROM [AccountBase] acc
where EXISTS(select top(1) SellDatetime From SoldItems hk where
SellDatetime is not null AND Owner is not null
AND Owner=acc.AccountId order by SellDatetime desc)
請有人幫助我,應該怎么做?
據我了解您的問題,您想要最新的銷售項目記錄。
您可以使用NOT EXISTS
的相關查詢,如下所示:
UPDATE acc
SET acc.SoldInLastSixYears
= CASE WHEN DATEDIFF(DAY, hk.SellDatetime, GETDATE())/ 365.2425 >= 6 THEN 0
ELSE 1
END
FROM [AccountBase] acc INNER JOIN SoldItems hk ON acc.AccountId=hk.Owner
where NOT EXISTS(select 1 From SoldItems s where
s.Owner=acc.AccountId and s.SellDatetime > hk.SellDatetime)
我認為您的查詢過於復雜。
UPDATE acc
SET acc.SoldInLastSixYears = (CASE WHEN DATEDIFF(DAY, hk.SellDatetime, GETDATE())/ 365.2425 >= 6
THEN 0 ELSE 1
END)
FROM AccountBase acc INNER JOIN
(SELECT hk.Owner, MAX(SellDatetime) as max_SellDateTime
FROM SoldItems hk
GROUP BY hk.Owner
) hk
ON acc.AccountId = hk.Owner;
我也不建議通過猜測天數來進行年份比較。 而是使用以下邏輯:
UPDATE acc
SET SoldInLastSixYears = (CASE WHEN hk.SellDatetime <= DATEADD(YEAR, -6, GETDATE())
THEN 0 ELSE 1
END)
FROM AccountBase acc INNER JOIN
(SELECT hk.Owner, MAX(SellDatetime) as max_SellDateTime
FROM SoldItems hk
GROUP BY hk.Owner
) hk
ON acc.AccountId = hk.Owner;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.