0
我有一個應用程序,當一個人進入辦公室時他必須進入辦公室,當他離開辦公室時,他必須註銷。這是一個考勤系統。日期範圍不在特定日期之間SQL Server
現在我想檢查使用特定日期缺席的SQL查詢。
表看起來像: -
應該是什麼查詢選擇personid
這是在特定日期缺席?
我有一個應用程序,當一個人進入辦公室時他必須進入辦公室,當他離開辦公室時,他必須註銷。這是一個考勤系統。日期範圍不在特定日期之間SQL Server
現在我想檢查使用特定日期缺席的SQL查詢。
表看起來像: -
應該是什麼查詢選擇personid
這是在特定日期缺席?
SELECT PERSONID
FROM <PERSON INFORMATION TABLE>
WHERE PERSONID NOT IN(SELECT PERSONID FROM <TIMING INFORMATION TABLE> WHERE INTIMESTAMP=<PARTICULAR DATE>)
您基本上想要從您的員工表中選擇每個員工,然後排除在特定日期登錄的任何人員。總之,這會創建一個PersonID在給定日期沒有看到的列表。
此解決方案有效,完整的情況爲例:
CREATE TABLE #temp (TimeSheetLogId INT IDENTITY(1,1), InTimeStamp DATETIME, OutTimeStamp DATETIME, PersonID INT);
-- last week
-- PersonID=1, didnt come to work last monday
-- INSERT #temp VALUES ('2013-11-19 09:00:00.000','2013-11-19 17:00:00.000',1);
INSERT #temp VALUES ('2013-11-20 09:00:00.000','2013-11-20 17:00:00.000',1);
INSERT #temp VALUES ('2013-11-21 09:00:00.000','2013-11-21 17:00:00.000',1);
INSERT #temp VALUES ('2013-11-22 09:00:00.000','2013-11-22 17:00:00.000',1);
INSERT #temp VALUES ('2013-11-23 09:00:00.000','2013-11-23 17:00:00.000',1);
-- 9AM-5PM shift
INSERT #temp VALUES ('2013-11-19 09:00:00.000','2013-11-19 17:00:00.000',2);
INSERT #temp VALUES ('2013-11-20 09:00:00.000','2013-11-20 17:00:00.000',2);
INSERT #temp VALUES ('2013-11-21 09:00:00.000','2013-11-21 17:00:00.000',2);
INSERT #temp VALUES ('2013-11-22 09:00:00.000','2013-11-22 17:00:00.000',2);
INSERT #temp VALUES ('2013-11-23 09:00:00.000','2013-11-23 17:00:00.000',2);
-- 11PM-7AM shift
INSERT #temp VALUES ('2013-11-18 23:00:00.000','2013-11-19 07:00:00.000',3);
INSERT #temp VALUES ('2013-11-19 23:00:00.000','2013-11-20 07:00:00.000',3);
INSERT #temp VALUES ('2013-11-20 23:00:00.000','2013-11-21 07:00:00.000',3);
INSERT #temp VALUES ('2013-11-21 23:00:00.000','2013-11-22 07:00:00.000',3);
INSERT #temp VALUES ('2013-11-22 23:00:00.000','2013-11-23 07:00:00.000',3);
-- this week
INSERT #temp VALUES ('2013-11-25 09:00:00.000',NULL,1);
INSERT #temp VALUES ('2013-11-25 09:00:00.000',NULL,2);
INSERT #temp VALUES ('2013-11-24 23:00:00.000',NULL,3);
DECLARE @ExamineDate DATE = '2013-11-19'
-- You want to select DISTINCT PersonID from your main STAFF table that contains all records, I did this for simplicity!
SELECT DISTINCT(PersonID)
FROM #temp A
EXCEPT
-- this query should remain as-is
SELECT PersonID
FROM #temp A
WHERE
CAST(A.InTimeStamp AS DATE) = @ExamineDate
OR
CAST(A.OutTimeStamp AS DATE) = @ExamineDate
;
DROP TABLE #temp;
你甚至嘗試的東西嗎?請嘗試一些東西回來,這是這個網站的工作原理 – nrathaus
你應該更具體地定義「缺席」。一個簡單的例子可能是那個角色沒有行的情況下,在特定的一天。但是您可以將缺勤定義爲「在工作時間少於X小時」等 –
是否有人在午夜工作?如果是的話,他們認爲「現在」在哪一天。 –