Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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_Sql Server - Fatal编程技术网

Sql 获取日期范围内每行的最小和最大日期时间

Sql 获取日期范围内每行的最小和最大日期时间,sql,sql-server,Sql,Sql Server,我正在努力解决这个问题!我的数据如下表所示,只是会有多个用户。请注意,这不仅仅是一个开始/结束时间,其间有许多日期 +-------------------------+--------+---------------------------+ | Date | Name 2 | Access | +-------------------------+--------+--------------------------

我正在努力解决这个问题!我的数据如下表所示,只是会有多个用户。请注意,这不仅仅是一个开始/结束时间,其间有许多日期

+-------------------------+--------+---------------------------+
| Date                    | Name 2 | Access                    |
+-------------------------+--------+---------------------------+
| 2014-09-29 14:50:03.000 | User1  | Ground Floor Door 1 (In)  |
+-------------------------+--------+---------------------------+
| 2014-09-30 08:42:33.000 | User1  | Ground Floor Door 2 (In)  |
+-------------------------+--------+---------------------------+
| 2014-09-30 08:42:58.000 | User1  | 1st Floor Door 1 (In)     |
+-------------------------+--------+---------------------------+
| 2014-09-30 12:31:54.000 | User1  | Ground Floor Door 1 (Out) |
+-------------------------+--------+---------------------------+
| 2014-09-30 13:05:43.000 | User1  | Ground Floor Door 1 (In)  |
+-------------------------+--------+---------------------------+
| 2014-09-30 13:11:32.000 | User1  | Ground Floor Door 3 (Out) |
+-------------------------+--------+---------------------------+
| 2014-09-30 13:55:28.000 | User1  | Ground Floor Door 1 (In)  |
+-------------------------+--------+---------------------------+
| 2014-09-30 13:55:36.000 | User1  | Ground Floor Door 2 (In)  |
+-------------------------+--------+---------------------------+
| 2014-09-01 18:31:21.000 | User1  | Ground Floor Door 4 (Out) |
+-------------------------+--------+---------------------------+
| 2014-10-01 08:31:21.000 | User1  | Ground Floor Door 1 (In)  |
+-------------------------+--------+---------------------------+
| 2014-10-01 08:31:41.000 | User1  | Ground Floor Door 2 (In)  |
+-------------------------+--------+---------------------------+
| 2014-10-01 17:31:49.000 | User1  | Ground Floor Door 4 (Out) |
+-------------------------+--------+---------------------------+
| 2014-10-02 08:31:51.000 | User1  | Ground Floor Door 1 (In)  |
+-------------------------+--------+---------------------------+
| 2014-10-02 18:41:49.000 | User1  | Ground Floor Door 3 (Out) |
+-------------------------+--------+---------------------------+
我需要获得一系列日期之间每天的最小值和最大值。如果我能计算出午餐时间有多长(中午12点到下午2点之间第一次和最后一次刷牙的时间差),那也很好,但在第一部分开始工作之前并不重要

到目前为止,我已经尝试了下面查询的各种版本,但没有任何乐趣。有人能帮我吗?我没有问题得到一个特定日期的最小值和最大值,只有当涉及一个范围时,它才不起作用

select min(Date) as EntryTime, max(Date) as ExitTime
from table
where [Name 2] like '%User1%' and EventTime between '2014-09-30 12:00:00' and '2014-10-05 12:00:00'
group by cast(Date as datetime)
这不会给出所需的结果集。我希望我的查询为我的表返回如下内容:

+-------------------------+-------------------------+----------+------------+
| EntryTime               | ExitTime                | Username | Date       |
+-------------------------+-------------------------+----------+------------+
| 2014-09-30 08:42:33.000 | 2014-09-01 18:31:21.000 | User1    | 2014-09-01 |
+-------------------------+-------------------------+----------+------------+
| 2014-10-01 08:31:21.000 | 2014-10-01 17:31:49.000 | User1    | 2014-10-01 |
+-------------------------+-------------------------+----------+------------+
| 2014-10-02 08:31:51.000 | 2014-10-02 18:41:49.000 | User1    | 2014-10-02 |
+-------------------------+-------------------------+----------+------------+

这将为您提供一个用户列表,每个用户都有每天的最小值和最大值

select cast(Date as datetime) as Date,Name,min(Date) as EntryTime, max(Date) as ExitTime
from table
where Date between '2014-09-30 12:00:00' and '2014-10-05 12:00:00'
group by cast(Date as datetime),Name

您可能需要将日期字段强制转换为日期类型

我认为问题在于您的强制转换,请尝试
强制转换为日期

select name_2,
       min(`date`) as EntryTime,
       max(`date`) as ExitTime,
       cast(`date` As Date) as YourDate
  from table
where UserName like '%User1%'
   and EventTime between '2014-09-30 12:00:00' and '2014-10-05 12:00:00'
 group by cast(`date` As Date), name_2

试试这个,看看你得到了什么

选择MIN([Date])作为“EntryTime”, 最大值([日期])为“退出时间”, 名称 从测试 其中CAST([Date]作为日期)介于CAST(getdate()-2作为日期)和CAST(getdate()作为日期)之间 和NAME='user 1' 按演员组([日期]为日期)、姓名分组

在我自己的桌子上测试,它工作正常。

此查询的输出是什么?有什么问题吗?我的查询为最小/最大列的每一行提供两次相同的日期。查询中的属性与示例数据不匹配。甚至不接近,他希望每天都有最小值和最大值,而不是每个名称。这不起作用,因为它只返回第一个日期的最小值(2014-09-30)和最后一个日期(2014-10-05)的最大值。它需要在database@sagi-不远,现在就像我的回答一样,你甚至复制了列名,你是认真的吗?@sagi-看一看-它甚至不接近;)出于某种原因,我无法在这个数据库中转换为日期。“类型日期不是定义的系统类型。”我使用CONVERT(varchar(11),Event)解决了这个问题,您的查询成功了!非常感谢。