Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.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
C# 如何获取每个用户的第一行和最后一行数据_C#_Sql_Visual Studio - Fatal编程技术网

C# 如何获取每个用户的第一行和最后一行数据

C# 如何获取每个用户的第一行和最后一行数据,c#,sql,visual-studio,C#,Sql,Visual Studio,我试图编写一个查询,只为每个用户选择第一条和最后一条记录 基本上我想: SELECT * FROM EmpData WHERE ClockNo is DISTINCT AND only the first and last record is displayed like in the picture. N.B it's color-coded per user 数据库: CREATE TABLE [dbo].[EmpData]( [ClockNo] [nvarchar](50) NULL,

我试图编写一个查询,只为每个用户选择第一条和最后一条记录

基本上我想:

SELECT * FROM EmpData WHERE ClockNo is DISTINCT AND only the first and last record
is displayed like in the picture. N.B it's color-coded per user
数据库:

CREATE TABLE [dbo].[EmpData](
[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] [nvarchar](50) NULL
) ON [PRIMARY]

有多种方法可以做到这一点。但是,将日期/时间值放在两列中会使这成为一个难题。因此,大多数方法都涉及到数据操作——这可能非常依赖于数据库

这是一个不需要日期/时间操作的方法。而且,它应该在大多数具有适当索引的数据库上运行良好:

select t.*
from t
where not exists (select 1
                  from t t2
                  where t2.clockno = t.clockno and
                        (t2.date > t.date or
                         t2.date = t.date and t2.time > t.time
                        )
                  ) or
      not exists (select 1
                  from t t2
                  where t2.clockno = t.clockno and
                        (t2.date < t.date or
                         t2.date = t.date and t2.time < t.time
                        )
                  ) ;

用您正在使用的数据库标记您的问题。太糟糕了,日期和时间字段是varchar。to_date(time,'hh24miss')和to_date(date,'yyyyymmdd')应该通过为每个用户提供两行数据来解决这一问题,但在检查时不需要第一次记录时间。如何对照时间列进行检查。注意,它是nvarchar@JohnaneUmslana . . . 您需要将时间转换为整数或数字。如果天数已过,开始时间为210000,结束时间为第二天050000,该怎么办?
select t.*
from t join
     (select clockno, date, min(time) as mint, max(time) as maxt
      from t
      group by clockno, date
     ) tt
     on tt.clockno = t.clockno and tt.date = t.date and
        t.time in (tt.mint, tt.maxt);