Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 带存储过程的SQL SERVER 2008最终选择命令_Database_Sql Server 2008_Datetime_Stored Procedures - Fatal编程技术网

Database 带存储过程的SQL SERVER 2008最终选择命令

Database 带存储过程的SQL SERVER 2008最终选择命令,database,sql-server-2008,datetime,stored-procedures,Database,Sql Server 2008,Datetime,Stored Procedures,我想把它做好是件小事 在下面的屏幕截图中,每个用户(userid)都有两个结果(有点重复) 如何修复查询以使每个用户只获得一个结果 (每个用户可以有两组“TimeIn”和“TimeOut”活动) 所以,若给定的用户确实有第二个“入口”,但还并没有离开 我只需要第一个关闭的入口/离开+第二个入口/仍在工作 这是存储过程 create table #tmp (tId int, UserId int, TimeIn1 smalldatetime, [TimeOut1] smalld

我想把它做好是件小事

在下面的屏幕截图中,每个用户(userid)都有两个结果(有点重复)

如何修复查询以使每个用户只获得一个结果

(每个用户可以有两组“TimeIn”和“TimeOut”活动)

所以,若给定的用户确实有第二个“入口”,但还并没有离开 我只需要第一个关闭的入口/离开+第二个入口/仍在工作

这是存储过程

    create table #tmp (tId int, UserId int, 
    TimeIn1 smalldatetime, [TimeOut1] smalldatetime, 
    TimeIn2 smalldatetime, [TimeOut2] smalldatetime, tId2 int,
    ActiveDate smalldatetime, ReasonID int, Name nvarchar(100), ReasonType nvarchar(100),
    TotalMins int)

    insert into #tmp (tId, UserId, TimeIn1, TimeOut1, ActiveDate, ReasonID, Name, ReasonType)
    SELECT
    t1.tId, t1.UserId, t1.TimeIn, t1.[TimeOut], t1.ActiveDate, t1.ReasonID, tblCustomers.name,tblTimeReas.ReasonType
    FROM tblTime t1
    inner join tblTimeReas on t1.ReasonID = tblTimeReas.ReasonID
    inner join tblCustomers on t1.UserId=tblCustomers.custID
    where (t1.userid in (select custID from tblCustomers where Classification =35) )
    and (DATEPART(DAY,t1.timein)= DATEPART(DAY,GETDATE()))
    and (DATEPART(MONTH,t1.timein)= DATEPART(MONTH,GETDATE()))
    and (DATEPART(YEAR,t1.timein)= DATEPART(YEAR,GETDATE()))

    update #tmp
    set tId2 = (select top 1 tId from 
    tblTime t2 where (userid in (select custID from tblCustomers where Classification =35)) and DATEDIFF(day,t2.timein,#tmp.timein1)=0
                    and t2.tId>#tmp.tId order by tId asc)


    update #tmp
    set TimeIn2 = (select TimeIn from tblTime where tId=tId2),
        TimeOut2 = (select [TimeOut] from tblTime where tId=tId2)


    update #tmp set TotalMins = (
        isnull(DATEDIFF(minute,timein1,timeout1),0)+
        isnull(DATEDIFF(minute,timein2,timeout2),0)

    )

    select *  from #tmp order by TimeIn1
    drop table #tmp

不知道怎么做,我没有参加sql server&Database课程,但这是我的最终代码 多弹性过滤

    create table #tmp (tId int, UserId int, 
    TimeIn1 smalldatetime, [TimeOut1] smalldatetime, 
    ActiveDate smalldatetime, ReasonID int, Name nvarchar(100), ReasonType nvarchar(100),
    TotalMins int)

    insert into #tmp (tId, UserId, TimeIn1, TimeOut1, ActiveDate, ReasonID, Name, ReasonType)
    SELECT
    t1.tId, t1.UserId, t1.TimeIn, t1.[TimeOut], t1.ActiveDate, t1.ReasonID, tblCustomers.name,tblTimeReas.ReasonType
    FROM tblTime t1
    inner join tblTimeReas on t1.ReasonID = tblTimeReas.ReasonID
    inner join tblCustomers on t1.UserId=tblCustomers.custID
    where (t1.userid in (select custID from tblCustomers where Classification Like '%,35%') )
    and (DATEPART(DAY,t1.timein)= DATEPART(DAY,GETDATE()))
    and (DATEPART(MONTH,t1.timein)= DATEPART(MONTH,GETDATE()))
    and (DATEPART(YEAR,t1.timein)= DATEPART(YEAR,GETDATE()))
    and TimeOut is null


    update #tmp set TotalMins = (
        isnull(DATEDIFF(minute,timein1,GETDATE()),0)
    )

    select *from #tmp  order by TimeIn1 
    drop table #tmp