如何获取此数据?

我有这样的事情:如何获取此数据?

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_timeOut_time

注:喜欢我有多个用户,让很多行,我怎样才能得到呢?

回答:

CREATE TABLE #data (

[Time] datetime,

[EQID] nvarchar(10),

[Status] bit,

[User] nvarchar(10)

)

INSERT INTO #data VALUES ('2017-12-27 12:12am', 'EQ1', 0, 'SA')

INSERT INTO #data VALUES ('2017-12-27 12:14am', 'EQ1', 1, 'SA')

INSERT INTO #data VALUES ('2017-12-27 02:30am', 'EQ1', 0, 'SA')

INSERT INTO #data VALUES ('2017-12-27 03:30am', 'EQ1', 1, 'SA')

INSERT INTO #data VALUES ('2017-12-27 05:30am', 'EQ1', 0, 'SA')

INSERT INTO #data VALUES ('2017-12-27 06:30am', 'EQ1', 1, 'SA')

-- Get the next time where status is 1

SELECT D1.[Time] as 'In_Time'

, D2.[Time] as 'Out_Time'

, D1.[EQID]

, D1.[User]

FROM #data D1

LEFT JOIN #data D2

ON D2.[Time] = (SELECT TOP 1 [Time]

FROM #data

WHERE [Status] = 1

AND [Time] > D1.[Time]

AND [User] = D1.[User]

AND [EQID] = D1.[EQID]

ORDER BY [Time])

WHERE D1.[Status] = 0

回答:

一种方法是做所有的行,其中状态= 0的主查询。这会给你所有的列,除了out_time

添加到这一点,一个相关子查询以获得out_time并获得第一行(为了通过Time),其中EQID和用户是相同的主查询,状态= 1,并且TimeTime更大在主查询中。

(换句话说,该out_Time是MIN Time此EQID &用户与状态= 1比当前状态= 0行更大。)

回答:

这里有几个问题。

  1. 你存储TIMEVARCHAR
  2. 您存储TIME没有DATE这使得它无法确定当用户在主频的第一天,但​​没有时钟输出的下一个
  3. 您还没有提到EQID是什么,或者你为什么选择在EQ1 EQ2的最后一行

有了这样说......这里是一个办法。

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

以上是 如何获取此数据? 的全部内容, 来源链接: utcz.com/qa/266996.html

回到顶部