我有这样的事情:
Time EQID STATUS USER
12:12am EQ1 0 SA
12:14am EQ1 1 SA
02:30am EQ2 0 SA
03:30am EQ2 1 SA
05:30am EQ1 0 SA
06:30am EQ2 1 SA
现在所需的输出是:
In_time Out_time EQID USER
12:12am 12:14am EQ1 SA
02:30am 03:30am EQ2 SA
05:30am 06:30am EQ1 SA
此处In_time
是状态为“0”的时间,Out_time
是状态为“1”的时间。如何为该特定EQID和用户获取此In_time
和Out_time
。
注意:像这样我有很多行有多个用户,我怎么能得到这个呢?
答案 0 :(得分:1)
一种方法是对Status = 0的所有行进行主查询。这将为您提供除out_time
之外的所有列。
添加到此,获取out_time
的相关子查询并获取第一行(按Time
排序),其中EQID和用户与主查询相同,状态= 1,以及Time
大于主查询中的Time
。
(换句话说,out_Time
是此EQID& User的MIN Time
,其Status = 1,大于当前Status = 0行。)
答案 1 :(得分:1)
sudo chown -R www-data /var/www
sudo chmod -R u=rwx /var/www
答案 2 :(得分:0)
这里有一些问题。
TIME
存储为VARCHAR
DATE
,因此无法确定用户何时在某一天上班但未在下一次计时说到这里......这是一种方式。
declare @table table ( [Time] varchar(64),
EQID char(3),
[STATUS] int,
[USER] char(2))
insert into @table
values
('12:12am','EQ1',0,'SA'),
('12:14am','EQ1',1,'SA'),
('02:30am','EQ2',0,'SA'),
('03:30am','EQ2',1,'SA'),
('05:30am','EQ1',0,'SA'),
('06:30am','EQ2',1,'SA')
;with cte as(
select
[Time]
,EQID
,[USER]
,[Status]
,RN = row_number() over(partition by [USER] order by cast(stuff([Time],6,0,' ') as time))
from
@table t)
select
In_Time = i.[Time]
,Out_Time = o.[Time]
,i.EQID
,i.[USER]
from
cte i
left join cte o on
o.[USER] = i.[USER]
and o.RN = i.RN + 1
where
i.[STATUS] = 0