我正在查看一個舊的支付系統,并且某些付款已輸入完全相同的日期時間(到第二個)(見附圖)
我想要實作的是在這些情況下,在其中一個上加一秒(沒關系),這樣我就可以區分日期。我已經嘗試過使用領先功能,但是由于兩個日期完全相同,它只是直接到之后的日期并忽略重復的日期。
我的領導功能看起來像這樣
CASE WHEN p.DateCreated = LEAD(DateCreated, 1,0) OVER (partition by TransactionID ORDER BY DateCreated) THEN DATEADD(SECOND,1,DateCreated) ELSE P.DateCreated end [DateCreated]

有誰知道實作這一目標的最佳方法?認為這可能只是我忽略的一些簡單的事情。
uj5u.com熱心網友回復:
用 CTE 和 PARTITION BY 試試這個
;WITH cte AS
(
SELECT
ROW_NUMBER() OVER(PARTITION BY Lead_Date ORDER BY Lead_Date ) AS rno,
Lead_Date
FROM yourTable
)
UPDATE cte SET Lead_Date = DATEADD(ss,1,Lead_Date)
WHERE rno=2
此查詢應在重復記錄中將 Lead_Date 添加 1 秒。
uj5u.com熱心網友回復:
這是一個使用LAG. 注意:如果有 3 個相同的值,則需要運行兩次,依此類推。
CREATE TABLE P (id int, dateCreated datetime);
insert into p values (1,'2022-03-03 10:30:00'), (2,'2022-03-03 10:30:00'), (3,'2022-03-03 10:30:10');
SELECT * FROM p;
UPDATE p set dateCreated = DATEADD(SECOND,1,DateCreated) FROM P JOIN ( SELECT ID, dateCreated d1 , LAG (dateCreated) over(order by dateCreated) d2 from p) P2 ON p.ID = p2.id WHERE dateCreated=d2;
SELECT * FROM p;
編號 | 創建日期 -: | :------------------------ 1 | 2022-03-03 10:30:00.000 2 | 2022-03-03 10:30:00.000 3 | 2022-03-03 10:30:10.000 編號 | 創建日期 -: | :------------------------ 1 | 2022-03-03 10:30:00.000 2 | 2022-03-03 10:30:01.000 3 | 2022-03-03 10:30:10.000
db<>在這里擺弄
uj5u.com熱心網友回復:
據我了解您的問題,您的案例中只缺少一件事,即“一個和運算子以及一個 LeadDate 條件”。請嘗試以下示例并將其與您的情況進行比較。
declare @tbl table(TransactionId int, DateCreated datetime, LeadDate datetime)
insert into @tbl
values(277090, '2020-04-13 18:50:17.580','2020-04-13 18:50:16.580')
,(277090, '2020-04-13 18:50:17.580','2020-04-13 18:50:16.580')
select * from @tbl
select TransactionId,DateCreated
, case when lead(DateCreated,1,0)over(partition by TransactionId order by DateCreated) = DateCreated
and lead(LeadDate,1,0)over(partition by TransactionId order by LeadDate) = LeadDate
then DATEADD(SECOND,1,LeadDate) else LeadDate end as LeadDate
from @tbl
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/436633.html
上一篇:為什么參考表兩次而不是一次
