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)解决了这个问题,您的查询成功了!非常感谢。