国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

如何用SQL只統計工作日的數據?

數據庫 MySQL
因為我們工作中其實很多時候確實只需要統計大家工作日的數據,比如考勤,有的甚至還有排除一些法定節假日(這個問題大家可以思考一下如何解決)。

[[388028]]

本文轉載自微信公眾號「SQL數據庫開發」,作者丶平凡世界。轉載本文請聯系SQL數據庫開發公眾號。

今天微信群里有位讀者提了個問題:如何用SQL統計一個月里工作日的數據?

我覺得這個問題問的挺好的,因為我們工作中其實很多時候確實只需要統計大家工作日的數據,比如考勤,有的甚至還有排除一些法定節假日(這個問題大家可以思考一下如何解決)。

下面我們針對讀者提出的這個問題,用SQL來進行求解。

題目

求解員工“張三”工作日上了多少天班?

測試數據

  1. CREATE TABLE Tmp0317 
  2. 姓名 VARCHAR(20), 
  3. 上班時間 DATETIME, 
  4. 下班時間 DATETIME 
  5.  
  6. INSERT INTO Tmp0317 VALUE ('張三','2021-03-01 08:05:03','2021-03-01 18:25:26'
  7. INSERT INTO Tmp0317 VALUE ('張三','2021-03-03 08:12:12','2021-03-01 18:01:16'
  8. INSERT INTO Tmp0317 VALUE ('張三','2021-03-04 08:11:24','2021-03-01 18:09:25'
  9. INSERT INTO Tmp0317 VALUE ('張三','2021-03-05 08:15:08','2021-03-01 18:14:43'
  10. INSERT INTO Tmp0317 VALUE ('張三','2021-03-09 08:20:26','2021-03-01 18:23:48'
  11. INSERT INTO Tmp0317 VALUE ('張三','2021-03-10 08:23:16','2021-03-01 18:19:04'
  12. INSERT INTO Tmp0317 VALUE ('張三','2021-03-11 08:19:13','2021-03-01 18:26:29'
  13. INSERT INTO Tmp0317 VALUE ('張三','2021-03-12 08:17:42','2021-03-01 18:11:12'
  14. INSERT INTO Tmp0317 VALUE ('張三','2021-03-13 08:15:37','2021-03-01 18:10:05'

分析

要求解工作日的天數,只需要排除掉周末即可,這里我們暫不考慮忘打卡的情況。我們可以借助SQL Server里面的系統表spt_values來進行求解

具體解法

  1. SELECT  
  2. SUM
  3. CASE WHEN DATEPART(WEEKDAY,DATEADD(DD,NUMBER,'2021-03-01' )) IN (1,7)  
  4. THEN 0  ELSE 1 END 
  5. AS WORKDAY 
  6. FROM MASTER..SPT_VALUES 
  7. JOIN Tmp0317 ON DATEADD(DAY, NUMBER, CONVERT(DATE'2021-03-01'))=CONVERT(DATE,上班時間) 
  8. WHERE TYPE='P'  
  9. AND NUMBER BETWEEN 0 AND DATEDIFF(DAY'2021-03-01', DATEADD(MONTH, 1, '2021-03-01'))-1 

(提示:可以左右滑動代碼)

結果為:

我們可以對照日歷表看下,“張三”在這幾天的工作日打開記錄:

其中紅色框表示工作日,綠色框表示周末,張三總共9條記錄,13日周六這天應該是回公司加班了,但是我們不算正常工作日的考勤記錄,所以結果是8.

代碼解析

上面的代碼估計很多讀者看的有點懵,這里我們將代碼先拆解開,看下每個函數里面的結果什么,大家就知道了。

首先是spt_values這個系統表,我們在之前的文章里有提到過具體的用法。

其次我們看下關聯條件:

  1. JOIN Tmp0317 ON  
  2. DATEADD(DAY, NUMBER, CONVERT(DATE'2021-03-01'))=CONVERT(DATE,上班時間) 

這里我們單獨看等號兩本的結果:

  1. SELECT  
  2. DATEADD(DAY, NUMBER, CONVERT(DATE'2021-03-01')) 
  3. FROM MASTER..SPT_VALUES  
  4. WHERE TYPE='P'  
  5. AND NUMBER BETWEEN 0 AND DATEDIFF(DAY'2021-03-01', DATEADD(MONTH, 1, '2021-03-01'))-1 

注意:這里必須加上后面的WHERE條件部分,其中后面的

DATEDIFF(DAY, '2021-03-01', DATEADD(MONTH, 1, '2021-03-01'))-1

的結果是30,這里因為我們的NUMBER是從0開始,所以后面要減去1,即從0-30,表示3月共31天

查詢出的結果如下:

后面還有16-31日的記錄未截取,大家可以去自己電腦上試驗一下。

然后再看等號右邊的結果:

  1. SELECT CONVERT(DATE,上班時間)  
  2. FROM Tmp0317 

結果如下:

這樣,我們就可以通過關聯條件來獲取到我們需要的上班日期了,但是這并不是工作日的上班日期,我們最后還要做一個判斷,那就是SELECT后面的CASE WHEN條件了。

CASE WHEN里面的代碼我們也單獨執行一下:

  1. SELECT  
  2.  
  3. DATEADD(DD,NUMBER,'2021-03-01' ), 
  4. DATEPART(WEEKDAY,DATEADD(DD,NUMBER,'2021-03-01' )) AS WORKDAY 
  5.  
  6. FROM MASTER..SPT_VALUES 
  7. JOIN Tmp0317 ON DATEADD(DAY, NUMBER, CONVERT(DATETIME, '2021-03-01'))=CONVERT(DATE,上班時間) 
  8. WHERE TYPE='P' AND NUMBER BETWEEN 0 AND DATEDIFF(DAY'2021-03-01', DATEADD(MONTH, 1, '2021-03-01'))-1 

我們將DATEPART里面的嵌套函數DATEADD也單獨拎出來,看下執行結果:

圖片

這里的DATEPART的功能主要是用來返回這一天是這個星期的第幾天,我們的系統日歷是按照美國的歷法,每周的第一天是星期日,所以2021-03-01的星期一是本周的第二天,以此類推,我們得到每一天對應在本周的第幾天。

知道這個結果后,我們可以得知,每個周的第2-6天是對應我們的工作日,那么我們可以取這個結果IN (2,3,4,5,6) 也可以 NOT IN (1,7)。

這里我們用CASE WHEN取的反義詞,當它IN (1,7)時我們返回0,表示不統計,其他結果返回1,表示統計。

即:

  1. SELECT  
  2.  
  3. DATEADD(DD,NUMBER,'2021-03-01' ), 
  4. DATEPART(WEEKDAY,DATEADD(DD,NUMBER,'2021-03-01' )), 
  5. CASE WHEN DATEPART(WEEKDAY,DATEADD(DD,NUMBER,'2021-03-01' )) IN (1,7) THEN 0  ELSE 1 END AS WORKDAY 
  6.  
  7. FROM MASTER..SPT_VALUES 
  8. JOIN Tmp0317 ON DATEADD(DAY, NUMBER, CONVERT(DATETIME, '2021-03-01'))=CONVERT(DATE,上班時間) 
  9. WHERE TYPE='P' AND NUMBER BETWEEN 0 AND DATEDIFF(DAY'2021-03-01', DATEADD(MONTH, 1, '2021-03-01'))-1 

結果為:

對WORKDAY列進行SUM求和就得到了我們的結果8

Q:這里能不使用spt_values嗎?

A:可以的,只需要構建一張臨時表,表結構也只需要一列,就是一列自增長的連續整數即可

 

責任編輯:武曉燕 來源: SQL數據庫開發
相關推薦

2012-10-11 15:32:53

筆記本聯想工作站

2022-04-30 07:53:54

Python腳本語言

2013-04-15 09:52:13

程序員

2015-11-11 16:52:49

高清視頻會議華為

2025-07-15 10:15:46

2019-10-15 15:15:31

Python大數據函數

2017-11-16 09:20:00

CIOERP信息化

2014-05-27 10:09:21

大數據

2023-08-22 08:01:42

SpringBatch事務管理

2021-08-08 22:08:41

Redis開發網頁

2012-09-10 10:26:22

工作工作習慣調整心態

2021-04-20 08:33:29

SQL快照數據

2010-04-01 10:20:30

Oracle時間日期操

2019-12-06 13:55:28

人社部大數據應用場景

2019-04-26 13:20:24

數據庫PostgreSQL Oracle

2021-01-12 11:31:09

數據科學數據大數據

2019-08-01 15:47:25

數據備份遷移

2021-02-22 14:40:11

5G5G網絡5G終端

2019-11-26 11:19:40

統計數據互聯網

2025-08-07 02:11:00

點贊
收藏

51CTO技術棧公眾號

1区2区3区在线视频| 久久精品magnetxturnbtih| 久久久久久久香蕉| 免费精品国产| 久久精品成人欧美大片| 99在线播放| 欧美色倩网站大全免费| 啊啊啊啊啊啊啊视频在线播放| www.性欧美| 人妻少妇被粗大爽9797pw| 福利一区福利二区| 欧美a级免费视频| 国产精品一区二区在线观看不卡 | 亚洲成人激情社区| 精品亚洲va在线va天堂资源站| 免费在线观看av网站| 欧美日韩国产一二三| 麻豆视频在线免费观看| 欧美视频自拍偷拍| 国产99re66在线视频| 国产乱码精品一区二区三区忘忧草| 久久久亚洲综合网站| 日韩有码一区二区三区| 好吊色视频988gao在线观看| 国产福利一区二区| 水蜜桃在线免费观看| 97se亚洲国产综合自在线观| 久久久久免费看黄a片app| 日本特黄久久久高潮| 国产99在线免费| 亚洲日产av中文字幕| 91av免费观看91av精品在线| 国产精品日本一区二区不卡视频 | 在线观看免费网站| 午夜欧美在线一二页| 在线免费av观看| 欧美日韩电影在线播放| 超碰人人在线| 亚洲精品一区二区三区99| 欧美亚洲韩国| 91黑丝在线观看| 无码日韩精品一区二区免费| 日本高清不卡的在线| 五月精品视频| 日韩欧美一区二区在线观看 | 欧美三级三级三级爽爽爽| 午夜dj在线观看高清视频完整版| 亚洲精品97久久| 欧美电影在线观看一区| 国产精品中文字幕久久久| 亚洲黄色精品| 成人在线国产视频| 伊人婷婷欧美激情| 高清全集视频免费在线| 在线成人激情黄色| 国产精品精品| 日韩精品一区二区三区久久| 亚洲午夜在线视频| 日本在线视频网址| 亚洲电影中文字幕| 精品av一区二区| 在线国产精品网| 五月激情六月综合| 日韩精品99| av日韩中文字幕| 国产日韩亚洲欧美综合| 91免费版在线观看| 在线观看国产精品日韩av| 欧美黄色免费| 最近久乱中文字幕| 亚洲第一精品电影| 美女精品在线观看| www.亚洲| 自拍偷拍免费精品| 夜色77av精品影院| 国内精品视频在线播放| 久久99九九99精品| 精品视频第一区| 亚久久调教视频| 欧美日韩在线中文| 在线成人高清不卡| 伊人久久精品一区二区三区| 欧美日韩第一页| 视频一区二区不卡| 日韩欧美xxxx| 国产免费久久精品| www.涩涩涩| 亚洲婷婷国产精品电影人久久| 91福利国产成人精品播放| 91在线观看视频| 91视频免费版污| 国产精品麻豆久久久| 精品国产一二三四区| 国产亚洲精品aa午夜观看| 欧美美女搞黄| www日韩欧美| 久久青草久久| 日本中文字幕在线2020| 男人日女人逼逼| 中文字幕免费国产精品| 国产美女一区视频| 97超级碰在线看视频免费在线看 | 欧美人与性动交a欧美精品| av最新在线| 亚洲欧洲一区二区三区久久| 鲁鲁在线中文| 国产一区二区三区视频在线观看| 9765激情中文在线| 亚洲成av人**亚洲成av**| 国产精品无码2021在线观看| 18成人在线观看| www.欧美日本| 精品日本高清在线播放| 牛牛热在线视频| 一区二区三区高清| aaa在线观看| 制服丝袜国产精品| 最近高清中文在线字幕在线观看| 欧美日韩国产美女| 国产嫩草在线视频| 麻豆国产va免费精品高清在线| 精品九九久久| 亚洲 欧洲 日韩| 日韩欧美电影一区| 蜜桃一区二区三区在线| 91破解版在线观看| 久久久久久国产精品久久| 国产精品对白| 99久久免费观看| 精品国产三级a在线观看| 成人黄色视屏网站| 91亚洲va在线va天堂va国| 亚洲乱码在线| 女同一区二区| 久久综合狠狠综合久久综合88| 黄上黄在线观看| 欧洲成人在线视频| 国产精品456露脸| 蜜桃av在线播放| 丝袜制服一区二区三区| 午夜精品久久久久久久男人的天堂 | 成人18在线| 亚洲乱码国产乱码精品精| 麻豆国产一区二区| 成人午夜888| 国产最新免费视频| 久久免费视频在线观看| 成人中文字幕在线| 亚洲精品视频在线免费| 国产精品久久久久9999爆乳| 热久久99这里有精品| 国产一区二区日韩| 欧美成人一区二区三区片免费 | 国产极品模特精品一二| gratisvideos另类灌满| h片在线观看下载| 成人国产精品| 97se综合| 7777精品| 亚洲国产美女| 毛片一区二区| 国产精品一区二区三区乱码| 91香蕉视频污| 亚洲国产日韩一级| 日韩精品久久久久久久玫瑰园| 欧美大胆a视频| 国产精品91免费在线| 91丨九色丨国产| 亚洲va码欧洲m码| 国产精品第3页| 精品免费久久久久久久| 国产乱码精品一区二区三区中文 | 欧美激情视频网址| 国产精品一二三在| 成人黄色在线看| 综合av第一页| 欧美三级韩国三级日本一级| 亚洲日韩欧美视频| 成人精品久久久| 亚洲乱码一区二区三区 | 欧美黑粗硬大| 女子免费在线观看视频www| 成人三级小说| 91精品动漫在线观看| 成人午夜看片网址| 色综合激情五月| 日韩在线国产精品| 日韩一区国产在线观看| 国产午夜伦鲁鲁| 欧美xxx.com| 国产一区电影| 欧美日韩激情视频一区二区三区| 日本大胆在线观看| 日韩电影免费网站| 国产亚洲短视频| 欧美区二区三区| 免费黄色日本网站| 欧美一区=区三区| 99精品视频在线免费观看| 日韩精品有码在线观看|