我有一個要求從表中有連續三天刪除行(排除天,如果週末之間進來)需要刪除連續三天不包括週末和節假日在SQL
CREATE TABLE [dbo].[Test]
(
[Scanid] [bigint] NULL,
[Employeeid] [int] NULL,
[Datescanned] [datetime] NULL
)
INSERT INTO [dbo].[Test]([Scanid], [Employeeid], [Datescanned])
VALUES (108639, 3820, '2016-04-28 17:12:33.000'),
(108639, 3820, '2016-04-28 18:05:46.000'),
(108639, 3820, '2016-04-28 20:58:36.000'),
(999999, 3820, '2016-04-29 10:08:00.000'),
(999999, 3820, '2016-04-29 10:12:10.000'),
(777777, 3820, '2016-05-02 10:12:00.000'),
(111111, 3820, '2016-04-04 10:12:00.000'),
(33333, 3820, '2016-04-11 17:23:00.000'),
(987623, 3820, '2016-04-18 11:12:00.000'),
(1234, 3820, '2016-05-26 10:00:00.000'),
(5678, 3820, '2016-05-27 10:00:00.000'),
(8920, 3820, '2016-05-31 10:00:00.000')
輸出:
Scanid Employeeid Datescanned
----------------------------------------
108639 3820 2016-04-28 17:12:33.000
108639 3820 2016-04-28 18:05:46.000
108639 3820 2016-04-28 20:58:36.000
999999 3820 2016-04-29 10:08:00.000
999999 3820 2016-04-29 10:12:10.000
777777 3820 2016-05-02 10:12:00.000
111111 3820 2016-04-04 10:12:00.000
33333 3820 2016-04-11 17:23:00.000
987623 3820 2016-04-18 11:12:00.000
1234 3820 2016-05-26 10:00:00.000
5678 3820 2016-05-27 10:00:00.000
8920 3820 2016-05-31 10:00:00.000
我們只能從日期掃描的字段獲取日期,然後在上面的例子中,我們應該刪除從'2016-04-28'到'2016-05-02'(2016-04-30和31日是週末,所以我們可以忽略),並刪除連續3日從'2016-05-26'到'2016-05-31'的行'(2016-05-29和30日是週末,所以我們可以忽略)。所以只有結果應顯示排在2016-04-04,2016-04-11,2016-04-18的天數之前或之後沒有連續3天。
我刪除了'mysql'標籤並添加了sql server,因爲它的語法看起來像這樣/ –
這進入了一些棘手的編碼。首先,你需要一個包含節日數據的表格,因爲這不是任何地方的SQL。創建一個包含未來20年所有日期的日期表可能是最簡單的,用一個位標誌來指示該日是否爲工作日。一旦存在,確定需要刪除的日期變得非常簡單。 –