當前位置:首頁 » 編程語言 » sql一天只能簽到一次
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql一天只能簽到一次

發布時間: 2022-10-22 21:25:55

『壹』 sql查詢在某段時間內某用戶的缺勤次數

SELECT COUNT(T1.USERID)
FROM XXX T1
WHERE T1.USERID='001'
AND T1.SIGNTYPE = '2'
AND TO_CHAR(T1.SIGNTIME,'YYYYMMDD') BETWEEN '20100101' AND '20101231'
AND NOT EXISTS (
SELECT 1
FROM XXX T2
WHERE T2.USERID='001'
AND T2.SIGNTYPE != '2'
AND TO_CHAR(T2.SIGNTIME,'YYYYMMDD') = TO_CHAR(T1.SIGNTIME,'YYYYMMDD')
)

--欄位數據前提假設:SIGNTIME為DATE類型,並且同一天正常情況下應該只有1條簽到數據,1條簽退數據.
--條件:假設用戶ID是001,統計時間段是20100101-20101231

剛重裝完系統,還沒裝ORACLE,未經調試,根據你實際的數據情況做修改吧

『貳』 SQL考勤的問題,目前考勤只能查到每天簽到簽退的成員,寫什麼語句能查到沒有簽到簽退的成員

從全體名單里篩除簽到的成員即可。
select * from 全體成員表 where 成員 not in (select 成員 from 簽到簽退表)

『叄』 sql語句實現考勤報表,sql語句怎樣實現員工同一天只有兩次考勤

兩次考勤:select 員工ID,TRUNC(TIME,'d') FROM 考勤表 group by 員工ID,TRUNC(TIME,'d')

having count(*)=2;
漏打:select 員工ID,TRUNC(TIME,'d') FROM 考勤表 group by 員工ID,TRUNC(TIME,'d')
having count(*)<2;

『肆』 java如何防止用戶一天內2次或多次執行某操作,比如考勤,一天內只能簽到一次

在表裡加一列操作時間
來操作的時候判斷一下就可以了

『伍』 一個sql語句的問題

弱弱的問一句,什麼資料庫
再一個,你把各個時間點也給一下,譬如早8點算正常上班,這種信息你也該給出來的,順便給你點提示

這種東西按一對一對來算,譬如上午簽到和簽退算一對,那麼如果簽到時間>8點或簽退時間<11點則算曠工半天,所以不能考慮除以4的情況

還是先把什麼資料庫弄出來吧,要不時間函數都不一樣,不太好弄,還有最好列舉幾條數據

---補充---
id,編號 signTime,簽到時間 signDate,簽到日期 signNum,簽到次序 username,簽到人 signState,簽到狀態

create table test (id int,
signTime varchar(8),
signDate varchar(10),
signNum int,
username varchar(20),
signState varchar(4));

insert into test values (1,'08:00:00', '2010-08-07',1,'張三','A');
insert into test values (1,'11:30:00', '2010-08-07',2,'張三','A');
insert into test values (1,'13:00:00', '2010-08-07',3,'張三','A');
insert into test values (1,'17:00:00', '2010-08-07',4,'張三','A');
insert into test values (1,'08:00:00', '2010-08-08',1,'張三','A');
insert into test values (1,'11:30:00', '2010-08-08',2,'張三','A');
insert into test values (1,'13:00:00', '2010-08-08',3,'張三','A');
insert into test values (1,'16:00:00', '2010-08-08',4,'張三','A');
insert into test values (1,'07:00:00', '2010-08-07',1,'李四','A');
insert into test values (1,'10:30:00', '2010-08-07',2,'李四','A');
insert into test values (1,'14:00:00', '2010-08-07',3,'李四','A');
insert into test values (1,'17:00:00', '2010-08-07',4,'李四','A');
insert into test values (1,'08:00:00', '2010-08-08',1,'李四','A');
insert into test values (1,'12:00:00', '2010-08-08',2,'李四','A');
insert into test values (1,'13:00:00', '2010-08-08',3,'李四','A');
insert into test values (1,'17:00:00', '2010-08-08',4,'李四','A');
insert into test values (1,'08:00:00', '2010-08-08',1,'王五','A');
insert into test values (1,'12:00:00', '2010-08-08',2,'王五','A');
insert into test values (1,'13:00:00', '2010-08-08',3,'王五','A');

select username,(morning+afternoon) 出勤天數 from
(select f.username username,sum(case when f.morning_sb=1 and f.morning_xb=1 then 0.5 else 0 end) morning,
sum(case when f.afternoon_sb=1 and f.afternoon_xb=1 then 0.5 else 0 end) afternoon
from
(select a.signDate signDate,a.username username,
case when b.morning_sb =1 then 1 else 0 end morning_sb ,
case when c.morning_xb =1 then 1 else 0 end morning_xb,
case when d.afternoon_sb =1 then 1 else 0 end afternoon_sb,
case when e.afternoon_xb =1 then 1 else 0 end afternoon_xb
from
(select a.signDate signDate,b.username username from
(select distinct signDate signDate from test where signdate between '2010-08-07' and '2010-08-08' ) a,
(select distinct username username from test) b) a
left join
(select signDate,username,case when signTime between '06:00:00' and '08:00:00' then 1 else 0 end morning_sb from test where signNum=1 and signDate between '2010-08-07' and '2010-08-08') b
on a.signDate=b.signDate
and a.username=b.username
left join
(select signDate,username,case when signTime between '11:00:00' and '13:00:00' then 1 else 0 end morning_xb from test where signNum=2 and signDate between '2010-08-07' and '2010-08-08') c
on b.signDate=c.signDate
and b.username=c.username
left join
(select signDate,username,case when signTime between '11:00:00' and '13:00:00' then 1 else 0 end afternoon_sb from test where signNum=3 and signDate between '2010-08-07' and '2010-08-08') d
on b.signDate=d.signDate
and b.username=d.username
left join
(select signDate,username,case when signTime between '17:00:00' and '23:59:59' then 1 else 0 end afternoon_xb from test where signNum=4 and signDate between '2010-08-07' and '2010-08-08') e
on b.signDate=e.signDate
and b.username=e.username) f
group by f.username) g

大概基本所有情況都考慮進去了,不懂的HI我吧,寫了很多,加測試大概用了一個小時

我算的是早8點-11點是上班時間,下午13點-17點是上班時間,可能有的地方寫的不對,你湊合看吧,估計看起來很累

-------------補充--------------
你都沒仔細看我寫的這堆吧?
其實都差不多,只要你改其中幾個地方就OK了
1,咱倆時間格式不一樣,我是2010-08-29,你是2010-8-29,時間我精確到了秒,你精確到了分鍾
2,運行過程中,我沒考慮最後的狀態,因為靠時間點就能來判斷是遲到或早退了

『陸』 每日簽到系統,如何實現每日只能簽到一次而不是多次這個限制

資料庫肯定是要用的,如果不用資料庫沒辦法實現的,再增加一個欄位用於標記是否簽到,簽到標記為1就可以了,這樣就能判斷是否已經簽到了

『柒』 求資料庫高手寫一個SQL語句

select
userid
as
用戶ID,count(userid)
as
當天簽到次數
from
表名
group
by
ip,time
having
count(userid)>=3

希望能幫到你

『捌』 如何用c語言編寫一個簽到的程序,一天只能簽到一次,不能重復簽到,最好是給代碼,如果麻煩的話,要用到

要看簽到的方式,時間點簽到,還是時間段簽到。你可以試試用定時器做,定時器的話c語言有sleep函數,mfc中有settimer定時器,這個最好看你的題目具體的要求。簽到函數,無非就是判斷狀態。

『玖』 sql關於查詢考勤系統查詢

再建立一個上班日期表,表內時應上班日期,因有節假日問題,如果是餐飲這種每人不固定的情況,只能建立人員上班情況表了。
建立存儲過程
循環一,人員檔案;
循環二,上班日期表,找出本月應上班的日期;
缺勤天數變數,簽到表日期不在上班日期表的,為缺勤,count出天數
循環三,簽到表;
缺勤時間,簽到表中時間對不上,上下班時間的進行累計;
有請假、倒休、公休情況,找到對應的請假表,進行對比,調整缺勤天數和缺勤時間變數。

『拾』 SQL2000資料庫問題,現在有兩張表,一張員工表和一張每日簽到表,能不能建立一個觸發器

這個需要建一個存儲過程和一個資料庫作業和一個返回隨機時間段的函數才能實現
如果有A表(員工),sUserCode,B表(簽到表),sUserCode,dtSignInDate
-- 返回隨機時間段的函數
Create Function RandDateTime(@RandNum Decimal(38,18),@StartTime DateTime,@EndTime DateTime)
Returns DateTime
As
Begin
Declare @HourDiff Decimal(38,18)--兩個時間之間的小時差值
Declare @MinutePartDiff Decimal(38,18)--分鍾部分的差值
Declare @SecondPartDiff Decimal(38,18)--秒部分的差值
Declare @MsPartDiff Decimal(38,18)--毫秒部分的差值
Declare @SmallDate DateTime
Declare @BigDate DateTime
Declare @ReturnDateTime DateTime

/*取各部分差值*/
Set @MsPartDiff = Abs(Convert(Decimal(38,18),DatePart(ms,@EndTime)-DatePart(ms,@StartTime)))
Set @SecondPartDiff = Abs(Convert(Decimal(38,18),DatePart(s,@EndTime)-DatePart(s,@StartTime)))
Set @MinutePartDiff = Abs(Convert(Decimal(38,18),DatePart(mi,@EndTime)-DatePart(mi,@StartTime)))
Set @HourDiff = DateDiff(hh,@StartTime,@EndTime)
Set @SmallDate = @StartTime
Set @BigDate = @EndTime
If @HourDiff <0
Begin
Set @SmallDate = @EndTime
Set @BigDate = @StartTime
Set @HourDiff = -@HourDiff
End

ActionLable:
Declare @HourDecimal Decimal(38,18)--小時的小數部分
Declare @HourString varchar(200)
Set @HourDiff = @HourDiff * @RandNum
Set @HourString = CONVERT(VARCHAR(200),@HourDiff)
Set @HourString = SubString(@HourString,CharIndex('.',@HourString)+1,Len(@HourString))
Set @HourString = '0.' + @HourString
Set @HourDecimal = Convert(Decimal(38,18),@HourString)
Set @MsPartDiff = (@MsPartDiff + @SecondPartDiff * 1000 + @MinutePartDiff*1000*60 + @HourDecimal * 3600*1000) * @RandNum
Set @ReturnDateTime = DateAdd(hh,@HourDiff,@SmallDate)
Set @ReturnDateTime = DateAdd(ms,@MsPartDiff,@ReturnDateTime)
Return @ReturnDateTime
End

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

-- 自動簽到存儲過程
Create procere p_AutoSignIn
begin
-- @startdate 打卡開始時間
-- @enddate 打卡結束時間
declare @startDate datetime
declare @enddate datetime
set @startDate=getdate()
set @endDate=dateadd(n,[20],@startDate) 可以換成自己需要的時間差值
-- a表示0-1 之間的隨機數值,可用小數
insert into B(sUserCode,dtSignInDate)
select sUserCode,RandDatetime (a,@startdate,@enddate) from A
end

-- 創建計劃作業
企業管理器
--管理
--SQL Server代理
--右鍵作業
--新建作業
--"常規"項中輸入作業名稱
--"步驟"項
--新建
--"步驟名"中輸入步驟名
--"類型"中選擇"Transact-SQL 腳本(TSQL)"
--"資料庫"選擇執行命令的資料庫
--"命令"中輸入要執行的語句:
update base set flag=0 where datediff(dd,date,getdate())=0

--確定
--"調度"項
--新建調度
--"名稱"中輸入調度名稱
--"調度類型"中選擇你的作業執行安排
--如果選擇"反復出現"
--點"更改"來設置你的時間安排為一天一次

然後將SQL Agent服務啟動,並設置為自動啟動,否則你的作業不會被執行

設置方法:
我的電腦--控制面板--管理工具--服務--右鍵 SQLSERVERAGENT--屬性--啟動類型--選擇"自動啟動"--確定.