簡體   English   中英

我想替換每個員工的日期值

[英]I want to replace a date value per employee

我在 excel 中有這個文件。 我需要對其進行轉換。 對於特定的 Personnum 和特定的日期,我想檢查 ENDREASON 是 out 還是 missOut。 如果錯過了,則為前一個條目的日期 ENDDTM。 即最后一個輸出條目將被視為missOut 值的StartDTM。 有什么辦法可以在 python 或 SQL 中編碼嗎? 有什么辦法可以在 Databricks 中做到這一點? 在此處輸入圖像描述

由於沒有列出任何列,我認為我們將不得不使用排名 function 然后使用查詢。 我沒有測試類似下面的查詢應該可以工作。請關注我正在使用的排名 function 並將 1 添加到第二個查詢。

CREATE TABLE foo1 
(
    APPLYDATE datetime,
    STARTDTM datetime,
    ENDDTM datetime,
    PERSONNUM int,
    STARTREASON varchar(100),
    ENDREASON varchar(100) 
) 

select getdate()

INSERT INTO foo1 
VALUES ('2020-04-23 00:00:00.000','2020-04-23 06:30:47.223','2020-04-23 10:10:47.223',204901477,'newshift','out')
INSERT INTO foo1 
VALUES ('2020-04-23 00:00:00.000','2020-04-23 21:45:47.223','2020-04-23 21:45:47.223',204901477,'newshift','missedout')
INSERT INTO foo1 
VALUES ('2020-04-23 00:00:00.000','2020-04-23 10:10:47.223','2020-04-23 12:15:47.223',204901477,'newshift','out')

INSERT INTO foo1 
VALUES ('2020-04-24 00:00:00.000','2020-04-24 06:30:47.223','2020-04-24 10:10:47.223',204901478,'newshift','out')
INSERT INTO foo1 
VALUES ('2020-04-24 00:00:00.000','2020-04-24 21:45:47.223','2020-04-24 21:45:47.223',204901478,'newshift','missedout')
INSERT INTO foo1 
VALUES ('2020-04-24 00:00:00.000','2020-04-24 10:10:47.223','2020-04-24 12:15:47.223',204901478,'newshift','out')


SELECT
    aa.PERSONNUM,
    ENDDTM = CASE 
                WHEN aa.ENDREASON = 'missedout' THEN bb.ENDDTM
                ELSE aa.ENDDTM
             END
FROM
    (SELECT
         ROW_NUMBER() OVER (PARTITION BY PERSONNUM ORDER BY PERSONNUM) AS id1,
         *
     FROM
         foo1) aa 
JOIN 
    (SELECT
         ROW_NUMBER() OVER (PARTITION BY PERSONNUM ORDER BY PERSONNUM) + 1  AS id2,
         *
     FROM
         foo1) bb ON aa.id1 = bb.id2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM