可能是正常的在白天的打卡資料,也可能是下面的夜間隔天打卡資料
insert into bbb (emplsn,emplname,skdatetime,skdate,sktime) values ('0001','張三','2020-10-15 23:55:00','2020-10-15','23:55:00');
insert into bbb (emplsn,emplname,skdatetime,skdate,sktime) values ('0001','張三','2020-10-15 23:53:00','2020-10-15','23:53:00');
insert into bbb (emplsn,emplname,skdatetime,skdate,sktime) values ('0001','張三','2020-10-15 23:59:00','2020-10-15','23:59:00');
insert into bbb (emplsn,emplname,skdatetime,skdate,sktime) values ('0001','張三','2020-10-16 23:55:00','2020-10-16','23:55:00');
insert into bbb (emplsn,emplname,skdatetime,skdate,sktime) values ('0001','張三','2020-10-16 23:53:00','2020-10-16','23:53:00');
insert into bbb (emplsn,emplname,skdatetime,skdate,sktime) values ('0001','張三','2020-10-16 23:59:00','2020-10-16','23:59:00');
insert into bbb (emplsn,emplname,skdatetime,skdate,sktime) values ('0001','張三','2020-10-17 23:55:00','2020-10-17','23:55:00');
insert into bbb (emplsn,emplname,skdatetime,skdate,sktime) values ('0001','張三','2020-10-17 23:53:00','2020-10-17','23:53:00');
insert into bbb (emplsn,emplname,skdatetime,skdate,sktime) values ('0001','張三','2020-10-17 23:59:00','2020-10-17','23:59:00');
insert into bbb (emplsn,emplname,skdatetime,skdate,sktime) values ('0002','李四','2020-10-15 23:55:00','2020-10-15','23:55:00');
insert into bbb (emplsn,emplname,skdatetime,skdate,sktime) values ('0002','李四','2020-10-15 23:53:00','2020-10-15','23:53:00');
insert into bbb (emplsn,emplname,skdatetime,skdate,sktime) values ('0002','李四','2020-10-15 23:59:00','2020-10-15','23:59:00');
insert into bbb (emplsn,emplname,skdatetime,skdate,sktime) values ('0002','李四','2020-10-16 23:55:00','2020-10-16','23:55:00');
insert into bbb (emplsn,emplname,skdatetime,skdate,sktime) values ('0002','李四','2020-10-16 23:53:00','2020-10-16','23:53:00');
insert into bbb (emplsn,emplname,skdatetime,skdate,sktime) values ('0002','李四','2020-10-16 23:59:00','2020-10-16','23:59:00');
insert into bbb (emplsn,emplname,skdatetime,skdate,sktime) values ('0002','李四','2020-10-17 23:55:00','2020-10-17','23:55:00');
insert into bbb (emplsn,emplname,skdatetime,skdate,sktime) values ('0002','李四','2020-10-17 23:53:00','2020-10-17','23:53:00');
insert into bbb (emplsn,emplname,skdatetime,skdate,sktime) values ('0002','李四','2020-10-17 23:59:00','2020-10-17','23:59:00');
規定上班時間是“00:30”,允許提前40分鐘打卡,怎樣使用sql陳述句得到上班時間,希望得到下面的結果
工號 姓名 日期 上班時間
0001 張三 2020-10-15 null
0001 張三 2020-10-16 2020-10-15 23:53:00
0001 張三 2020-10-17 2020-10-16 23:53:00
0002 李四 2020-10-15 null
0002 李四 2020-10-16 2020-10-15 23:53:00
0002 李四 2020-10-17 2020-10-16 23:53:00
打卡日期是不固定的,1個月中可能全部打卡,也可能有一些日期沒有打卡,大部分班次是正常的白天班次,個別班次是像上面的夜間班次(起始或終止打卡時間隔天了),需要一條通用的sql陳述句來實作
uj5u.com熱心網友回復:
這么晚了還在研究啊?不用睡覺嗎?uj5u.com熱心網友回復:
CREATE TABLE #A
(
EMPLSN VARCHAR(20),
EMPLNAME VARCHAR(20),
SKDATETIME DATETIME,
SKDATE DATE,
SKTIME TIME
)
insert into #A values ('0001','張三','2020-10-15 23:55:00','2020-10-15','23:55:00');
insert into #A (emplsn,emplname,skdatetime,skdate,sktime) values ('0001','張三','2020-10-15 23:53:00','2020-10-15','23:53:00');
insert into #A (emplsn,emplname,skdatetime,skdate,sktime) values ('0001','張三','2020-10-15 23:59:00','2020-10-15','23:59:00');
insert into #A (emplsn,emplname,skdatetime,skdate,sktime) values ('0001','張三','2020-10-16 23:55:00','2020-10-16','23:55:00');
insert into #A (emplsn,emplname,skdatetime,skdate,sktime) values ('0001','張三','2020-10-16 23:53:00','2020-10-16','23:53:00');
insert into #A (emplsn,emplname,skdatetime,skdate,sktime) values ('0001','張三','2020-10-16 23:59:00','2020-10-16','23:59:00');
insert into #A (emplsn,emplname,skdatetime,skdate,sktime) values ('0001','張三','2020-10-17 23:55:00','2020-10-17','23:55:00');
insert into #A (emplsn,emplname,skdatetime,skdate,sktime) values ('0001','張三','2020-10-17 23:53:00','2020-10-17','23:53:00');
insert into #A (emplsn,emplname,skdatetime,skdate,sktime) values ('0001','張三','2020-10-17 23:59:00','2020-10-17','23:59:00');
insert into #A (emplsn,emplname,skdatetime,skdate,sktime) values ('0002','李四','2020-10-15 23:55:00','2020-10-15','23:55:00');
insert into #A (emplsn,emplname,skdatetime,skdate,sktime) values ('0002','李四','2020-10-15 23:53:00','2020-10-15','23:53:00');
insert into #A (emplsn,emplname,skdatetime,skdate,sktime) values ('0002','李四','2020-10-15 23:59:00','2020-10-15','23:59:00');
insert into #A (emplsn,emplname,skdatetime,skdate,sktime) values ('0002','李四','2020-10-16 23:55:00','2020-10-16','23:55:00');
insert into #A (emplsn,emplname,skdatetime,skdate,sktime) values ('0002','李四','2020-10-16 23:53:00','2020-10-16','23:53:00');
insert into #A (emplsn,emplname,skdatetime,skdate,sktime) values ('0002','李四','2020-10-16 23:59:00','2020-10-16','23:59:00');
insert into #A (emplsn,emplname,skdatetime,skdate,sktime) values ('0002','李四','2020-10-17 23:55:00','2020-10-17','23:55:00');
insert into #A (emplsn,emplname,skdatetime,skdate,sktime) values ('0002','李四','2020-10-17 23:53:00','2020-10-17','23:53:00');
insert into #A (emplsn,emplname,skdatetime,skdate,sktime) values ('0002','李四','2020-10-17 23:59:00','2020-10-17','23:59:00');
SELECT MIN(A.EMPLSN) 工號,A.EMPLNAME 姓名,A.SKDATE 日期,MIN(A.SKDATETIME) 上班時間,
(SELECT MIN(B.SKDATETIME) FROM #A B WHERE A.SKDATE = LEFT(DATEADD(MI,40,B.SKDATETIME),10) AND B.SKDATETIME NOT BETWEEN '00:30:00' AND '23:50:00')
FROM #A A GROUP BY A.EMPLNAME,A.SKDATE ORDER BY MIN(A.EMPLSN),A.SKDATE
DROP TABLE #A
看上去好像和你要的結果差不多
uj5u.com熱心網友回復:
要通用,你得把白班的邏輯也描述清楚,以下只適合夜班,早于40分鐘的認為沒有打卡
CREATE TABLE #T
(EMPLSN VARCHAR(20),
EMPLNAME VARCHAR(20),
SKDATETIME DATETIME,
SKDATE DATE,
SKTIME TIME)
insert into #T (emplsn,emplname,skdatetime,skdate,sktime) values ('0001','張三','2020-10-15 23:55:00','2020-10-15','23:55:00');
insert into #T (emplsn,emplname,skdatetime,skdate,sktime) values ('0001','張三','2020-10-15 23:53:00','2020-10-15','23:53:00');
insert into #T (emplsn,emplname,skdatetime,skdate,sktime) values ('0001','張三','2020-10-15 23:59:00','2020-10-15','23:59:00');
insert into #T (emplsn,emplname,skdatetime,skdate,sktime) values ('0001','張三','2020-10-16 23:55:00','2020-10-16','23:55:00');
insert into #T (emplsn,emplname,skdatetime,skdate,sktime) values ('0001','張三','2020-10-16 23:53:00','2020-10-16','23:53:00');
insert into #T (emplsn,emplname,skdatetime,skdate,sktime) values ('0001','張三','2020-10-16 23:59:00','2020-10-16','23:59:00');
insert into #T (emplsn,emplname,skdatetime,skdate,sktime) values ('0001','張三','2020-10-17 23:55:00','2020-10-17','23:55:00');
insert into #T (emplsn,emplname,skdatetime,skdate,sktime) values ('0001','張三','2020-10-17 23:56:00','2020-10-17','23:53:00');
insert into #T (emplsn,emplname,skdatetime,skdate,sktime) values ('0001','張三','2020-10-17 23:59:00','2020-10-17','23:59:00');
insert into #T (emplsn,emplname,skdatetime,skdate,sktime) values ('0001','張三','2020-10-18 23:49:00','2020-10-17','23:59:00');
insert into #T (emplsn,emplname,skdatetime,skdate,sktime) values ('0002','李四','2020-10-15 23:55:00','2020-10-15','23:55:00');
insert into #T (emplsn,emplname,skdatetime,skdate,sktime) values ('0002','李四','2020-10-15 23:53:00','2020-10-15','23:53:00');
insert into #T (emplsn,emplname,skdatetime,skdate,sktime) values ('0002','李四','2020-10-15 23:59:00','2020-10-15','23:59:00');
insert into #T (emplsn,emplname,skdatetime,skdate,sktime) values ('0002','李四','2020-10-16 23:55:00','2020-10-16','23:55:00');
insert into #T (emplsn,emplname,skdatetime,skdate,sktime) values ('0002','李四','2020-10-16 23:53:00','2020-10-16','23:53:00');
insert into #T (emplsn,emplname,skdatetime,skdate,sktime) values ('0002','李四','2020-10-16 23:59:00','2020-10-16','23:59:00');
insert into #T (emplsn,emplname,skdatetime,skdate,sktime) values ('0002','李四','2020-10-17 23:55:00','2020-10-17','23:55:00');
insert into #T (emplsn,emplname,skdatetime,skdate,sktime) values ('0002','李四','2020-10-17 23:53:00','2020-10-17','23:53:00');
insert into #T (emplsn,emplname,skdatetime,skdate,sktime) values ('0002','李四','2020-10-17 23:59:00','2020-10-17','23:59:00');
DECLARE @MONTH VARCHAR(10)
DECLARE @BEGIN_DATE VARCHAR(10)
DECLARE @END_DATE VARCHAR(10)
SET @MONTH='2020-10'
SET @BEGIN_DATE=@MONTH+'-01'
SET @END_DATE=DATEADD(DAY,-1,DATEADD(MONTH,1,CONVERT(DATE,@BEGIN_DATE)))
;WITH CTE AS
(SELECT *
FROM (SELECT CONVERT(VARCHAR(10),DATEADD(DAY,NUMBER,@BEGIN_DATE),120) AS SINGLE_DAY
FROM MASTER.DBO.spt_values
WHERE NUMBER<=DATEDIFF(DAY,@BEGIN_DATE,@END_DATE) AND TYPE='P') AS A
JOIN (SELECT DISTINCT EMPLSN,EMPLNAME FROM #T) AS B ON 1=1)
SELECT A.EMPLSN,A.EMPLNAME,A.SINGLE_DAY,B.START_DATE
FROM CTE A
LEFT JOIN
(SELECT EMPLSN,CONVERT(VARCHAR(10),DATEADD(MINUTE,40,SKDATETIME),120) AS WORK_DAY,MIN(SKDATETIME) AS START_DATE
FROM #T
WHERE CONVERT(VARCHAR(8),DATEADD(MINUTE,40,SKDATETIME),114)>='00:30:00'
GROUP BY EMPLSN,CONVERT(VARCHAR(10),DATEADD(MINUTE,40,SKDATETIME),120)) AS B ON A.SINGLE_DAY=B.WORK_DAY AND A.EMPLSN=B.EMPLSN
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/239444.html
標籤:基礎類
上一篇:2020年即將結束
下一篇:jsp連接MySQL的問題
