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
Sql 我想在存储过程中获取特定员工的两个日期之间的记录_Sql_Database_Stored Procedures - Fatal编程技术网

Sql 我想在存储过程中获取特定员工的两个日期之间的记录

Sql 我想在存储过程中获取特定员工的两个日期之间的记录,sql,database,stored-procedures,Sql,Database,Stored Procedures,我有两张桌子。问题是退房时间只显示一个日期数据,我需要多个记录 CREATE TABLE [dbo].[ras_AttRecord] ( [ID] [int] IDENTITY(1,1) NOT NULL, [DN] [smallint] NULL, [DIN] [bigint] NOT NULL, [Clock] [datetime] NOT NULL, [VerifyMode] [tinyint] NULL, [AttTypeId] [char

我有两张桌子。问题是退房时间只显示一个日期数据,我需要多个记录

CREATE TABLE [dbo].[ras_AttRecord]
(
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [DN] [smallint] NULL,
    [DIN] [bigint] NOT NULL,
    [Clock] [datetime] NOT NULL,
    [VerifyMode] [tinyint] NULL,
    [AttTypeId] [char](3) NOT NULL,
    [CollectDate] [datetime] NOT NULL,
    [LastUpdatedUID] [int] NULL,
    [LastUpdatedDate] [datetime] NULL,
    [Remark] [nvarchar](64) NULL
)

CREATE TABLE [dbo].[ras_Users]
(
    [UID] [int] NOT NULL,
    [DIN] [bigint] NOT NULL,
    [PIN] [varchar](32) NOT NULL,
    [UserName] [nvarchar](64) NULL,
    [Sex] [char](1) NOT NULL,
    [Password] [nvarchar](32) NULL,
    [PasswordQuestion] [nvarchar](64) NULL,
    [PasswordAnswer] [nvarchar](32) NULL,
    [IsApproved] [bit] NOT NULL,
    [IsLockedOut] [bit] NOT NULL,
    [CreateDate] [datetime] NULL,
    [LastLoginDate] [datetime] NULL,
    [DeptId] [varchar](64) NOT NULL,
    [AttId] [char](4) NULL,
    [RuleId] [char](4) NULL,
    [WeekendId] [char](4) NULL,
    [LastUpdatedUID] [int] NULL,
    [LastUpdatedDate] [datetime] NOT NULL,
    [Comment] [nvarchar](128) NULL
)
我有一个存储过程:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER  PROCEDURE [dbo].[GetLateComersmonthly]       
    @FromDate DATE = '05/22/2017', 
    @ToDate DATE = '06/06/2017',       
    @Code VARCHAR(6) = '3155'      
AS       
BEGIN        
    SET NOCOUNT ON;       

    IF @Code = '0'        
        SET @Code = NULL

    SELECT 
        T1.UserName, T1.DIN AS [DIN], 
        MIN(T1.Date) AS [Date], MIN(T1.Time) AS [Time], 
        CASE   
           WHEN MAX(T2.Time) = MAX(T1.Time) 
              THEN '' 
              ELSE MAX(T2.Time) 
        END AS [Timee],  
        MIN(T1.Day) AS [Day],
        CASE   
           WHEN CONCAT(CONVERT(VARCHAR, DATEDIFF(MINUTE, MIN(T1.Time), MAX(t2.Time)), 108) / 60, ':', CONVERT(VARCHAR, DATEDIFF(MINUTE, MIN(T1.Time), MAX(t2.Time)) % 60, 108)) = '0:0' 
              THEN 'No Check Out' 
              ELSE CONCAT(CONVERT(VARCHAR, DATEDIFF(MINUTE, MIN(T1.Time), MAX(t2.Time)), 108) / 60, ':', CONVERT(VARCHAR, DATEDIFF(MINUTE, MIN(T1.Time), MAX(t2.Time)) % 60, 108)) 
        END AS hrs
    FROM
        (SELECT 
             UserName, ru.DIN, 
             CONVERT(VARCHAR, Att.Clock, 101) AS Date, 
             CONVERT(VARCHAR, Att.Clock, 108) AS Time, 
             att.VerifyMode as Mode, 
             DATENAME(dw, Att.Clock) AS Day        
         FROM
             ras_Users AS ru        
         INNER JOIN
             ras_AttRecord AS att ON ru.DIN = att.Din        
         WHERE
             CONVERT(DATE, Clock) >= @FromDate 
             AND CONVERT(DATE, Clock) <= @ToDate 
             AND att.DIN = COALESCE (@Code, att.DIN)  
             AND att.VerifyMode = 15) as T1 
    LEFT JOIN
       (SELECT  
            ru.DIN, MAX(CONVERT(VARCHAR, Att.Clock, 108)) AS Time  
        FROM
            ras_Users as ru        
        INNER JOIN
            ras_AttRecord AS att ON ru.DIN = att.Din        
        WHERE
            CONVERT(DATE, Clock) >= @FromDate 
            AND CONVERT(DATE, Clock) <= @ToDate 
            AND att.DIN = COALESCE (@Code, att.din) 
        GROUP BY 
            ru.DIN, att.Clock) as  T2 ON T1.DIN = T2.DIN 
                             --and DATEDIFF(MINUTE,T1.Time,t2.Time)/60 < 9
    GROUP BY
        T1.Username, T1.din, T1.Day      
    -- having CONVERT(varchar, min(T1.Time), 108) > '09:30:00'   
    ORDER BY 
        T1.din
END 
问题是退房时间只显示一个日期数据,我想要多个 以及以下

预期结果

Userid  Date        CheckIn     CheckOut    Day       total hours
    3155    05/26/2017  09:15:10    17:00:00    Friday    8:0
    3155    05/29/2017  09:08:36    17:05:00    Monday    8:7
    3155    05/25/2017  09:34:28    17:30:00    Thursday  7:41
    3155    05/30/2017  09:15:12    17:18:00    Tuesday   8:0
    3155    05/31/2017  09:27:37    17:10:00    Wednesday 7:48
Userid  Date        CheckIn     CheckOut    Day       total hours
    3155    05/26/2017  09:15:10    17:00:00    Friday    8:0
    3155    05/29/2017  09:08:36    17:05:00    Monday    8:7
    3155    05/25/2017  09:34:28    17:30:00    Thursday  7:41
    3155    05/30/2017  09:15:12    17:18:00    Tuesday   8:0
    3155    05/31/2017  09:27:37    17:10:00    Wednesday 7:48