百思不得其解.SQL语句的问题.(100分)

  • 主题发起人 主题发起人 rk_kitty
  • 开始时间 开始时间
R

rk_kitty

Unregistered / Unconfirmed
GUEST, unregistred user!
这是一个考勤系统中的语句,我想使in1(第一次上班的时间)为符合条件的最早时间
可SQL SERVER总是取中间的时间.

001 7:03
001 7:23
001 7:28
它总是取7:23,不取7:03.
重点帮忙看一下加粗的部分.
UPDATE A
SET
A.In1= CASE
WHEN (T.Rec_datetime>DateAdd(Minute,@DecMinute,C.In1) AND T.Rec_datetime<DateAdd(Minute,@AddMinute,C.In1))
AND ((T.Rec_Datetime<A.In1) or (A.In1 IS Null))
THEN T.Rec_datetime ELSE A.In1 END,

A.Out1= CASE
WHEN T.Rec_datetime>DateAdd(Minute,@DecMinute,C.out1) AND
T.Rec_datetime<DateAdd(Minute,@AddMinute,C.out1)
THEN T.Rec_datetime ELSE A.Out1 END,
A.In2= CASE
WHEN T.Rec_datetime>DateAdd(Minute,@DecMinute,C.In2) AND
T.Rec_datetime<DateAdd(Minute,@AddMinute,C.In2)
THEN T.Rec_datetime ELSE A.In2 END,
A.Out2= CASE
WHEN T.Rec_datetime>DateAdd(Minute,@DecMinute,C.out2) AND
T.Rec_datetime<DateAdd(Minute,@AddMinute,C.out2)
THEN T.Rec_datetime ELSE A.Out2 END,
A.In3= CASE
WHEN T.Rec_datetime>DateAdd(Minute,@DecMinute,C.In3) AND
T.Rec_datetime<DateAdd(Minute,@AddMinute,C.In3)
THEN T.Rec_datetime ELSE A.In3 END,
A.Out3= CASE
WHEN T.Rec_datetime>DateAdd(Minute,@DecMinute,C.out3) AND
T.Rec_datetime<DateAdd(Minute,@AddMinute,C.out3)
THEN T.Rec_datetime ELSE A.Out3 END
FROM test T INNER JOIN Attend A ON A.CardNo = T.CardNo
INNER JOIN CardNo_Time C ON C.CardNo=A.CardNo
WHERE A.RecDate = @RecDate
 
呵呵,我不太会的,哥们
 
太大了!让我好好看一下。[:)]
 
test 为记录了考勤数据的表结构如下:
test
CardNo Rec_datetime
0001 2001-12-10 07:11:00
0002 2001-12-10 07:11:00
0001 2001-12-10 07:13:00
0001 2001-12-10 07:21:00
...
 
太大了,有空看看
 
我先看看。
 
A.In1= CASE
WHEN (T.Rec_datetime>DateAdd(Minute,@DecMinute,C.In1) AND T.Rec_datetime<DateAdd(Minute,@AddMinute,C.In1))
AND ((T.Rec_Datetime<A.In1) or (A.In1 IS Null))
THEN T.Rec_datetime ELSE A.In1 END,

----------------------------------------------------------------------------------
IF (T.Rec_datetime>DateAdd(Minute,@DecMinute,C.In1) AND T.Rec_datetime<DateAdd(Minute,@AddMinute,C.In1))
AND ((T.Rec_Datetime<A.In1) or (A.In1 IS Null)) THEN
A.In1 = T.Rec_datetime
ELSE
A.In1 = A.In1
 
取第一个用top
 
to zhihuali:
不知怎么用?我已用就出错.
to 千中元:
可否详细点?
 
可SQL SERVER总是取中间的时间.

001 7:03
001 7:23
001 7:28
它总是取7:23,不取7:03.
-------从这段话看,你是要从这几个数据中取得时间再排序(不解为何不单独用时间字段)
你截取出时间,order by 这个时间,再select top1
sql server中是top n 取前n条(其他数据库中也有相应得)
 
同意楼上,把数据排序后再取。
 
我这是从一个有限制条件的数据中取(一个时间段)第一次上班,第一次下班,
第二次上班...我要先做判断才行,不能从全部数据中取
 
不是全部数据也可以top 的。
数据集的概念

 
你可以用查询嵌套的方法,先分组再排序,然后再逐个取值。
应该能行吧!
就象老千中元同志说的,嘿嘿~~~~~~[:)]
 
太深了
我先慢慢想一下
不提前了
 
Thanks.
use "update A set TableA.Field1=(Select Min(B.Field2) FROM TABLEB B INNER JOIN
TABLEC C ON B.Field2=C.Field2 WHERE C.Field2=A.Field2
(AND OTHER CONDITION)) FROM TABLEA A"
FOR GENERRAL,TABLEA,TABLEB,TABLEC IS ANY TABLE.
SEE SQL HELP ONLINE IS BEST WAY.
 

Similar threads

后退
顶部