如何在同一桌子上但在不同线路上获得时间差异

问题描述 投票:-1回答:4

我想知道如果数据在同一个表中但在两个单独的行上,如何获得时间差异。例如,下面我有一个数据截图,每个员工都有两个记录,第一个时钟点和最后一个时钟点。我希望这些时间之间的差异并将其保存到新表中。我怎么做?

表结构:

CREATE TABLE [dbo].[RefinedData](
[ClockNo] [nvarchar](50) NULL,
[FirstName] [nvarchar](50) NULL,
[LastName] [nvarchar](50) NULL,
[Department] [nvarchar](50) NULL,
[ClockPoint] [nvarchar](50) NULL,
[Date] [nvarchar](50) NULL,
[Time] [int] NULL
) ON [PRIMARY]

数据布局:enter image description here

所以在这种情况下,我希望用户Gerard在新表中保存的时差,但每个用户只有一条记录。

c# sql database
4个回答
2
投票

从您的示例数据中可以明显看出,每个用户有2行数据。 row_number将为您服务。减去rn2-rn1将返回所需的输出

with cte as
(select  [ClockNo] ,
        [FirstName] ,
        [LastName] ,
        [Department] ,
        [ClockPoint] ,
        [Date] ,
        time,
        ROW_NUMBER() over partition by clockno,firstname order by date,time) rn
        from mytable 
        ) 

        select  c.[ClockNo] ,
        c.[FirstName] ,
        c.[LastName] ,
        c.[Department] ,
        c.[ClockPoint] ,
        c.[Date] ,
        c1.time -c.time
        from cte c inner join (select * from  cte where rn= 2) c1 
        on c.rn = c1.rn-1 and c.firstname = c.firstname and c.clockno = c1.cloclno 
         where c.rn = 1

0
投票

您可以执行以下操作:

var differences = 
    refinedData.GroupBy(d => d.ClockNo)
               .Select( g => g.OrderBy(d => d.Time))
               .Select( g => new {
                   ClockNo = g.ClockNo,
                   Difference = g.Last() - g.First() });

0
投票

试试这个-

select Firstname,cast(max(Time)-min(Time) as time) as 'time difference'
into #temptable
from RefinedData 
where FirstName like 'Gerard'
and Date like '20180301'
group by Firstname

0
投票

在这里你可以开始:

select *, datediff(hour, LAG([Datetime]) over (partition by FirstName, LastName order by [Datetime]), [Datetime]) [Difference_in_hours]
from (
select FirstName,
       LastName,
       ClockPoint,
       --get correctly formatted date column
       cast(stuff(STUFF([DATE], len([DATE]) - 3, 0, '-'), len([DATE]), 0, '-') + ' ' + stuff(STUFF([time], len([time]) - 3, 0, ':'), len([time]), 0, ':') as datetime) [Datetime]
from [RefinedData]
) a where
ClockPoint like '% out %' or
ClockPoint like '% in %' or
ClockPoint like '% out' or
ClockPoint like '% in' or
ClockPoint like 'out %' or
ClockPoint like 'in %'
© www.soinside.com 2019 - 2024. All rights reserved.