最大日期& sql Server中的最小日期

时间:2014-05-11 05:54:00

标签: sql sql-server vb.net

任何人都请帮助我

如何使用SQL查找昨天的最大时间和今天的最短时间。我需要昨天的最长时间Tine_in和今天的最短时间Time_out

像这样:

我有一张这样的表:

|--ID--|--Time-------|--Date------|  
|--1---|08:03:00 PM|04/01/2014|  
|--1---|08:07:00 AM|04/02/2014|   
|--1---|08:11:00 PM|04/02/2014|  
|--1---|08:02:00 AM|04/03/2014|  
|--1---|08:10:00 PM|04/03/2014|  
|--1---|08:05:00 AM|04/04/2014|  
|--1---|08:10:00 PM|04/04/2014|  
|--1---|08:06:00 AM|04/05/2014|  
|--1---|08:15:00 PM|04/05/2014|  
|--1---|08:01:00 AM|04/06/2014|  
|--1---|08:08:00 PM|04/06/2014|  

我需要这些结果:

|--ID--|--Date------|--Time_in----|--Time_out--|  
|--1---|04/01/2014|08:03:00 PM|08:07:00 AM|  
|--1---|04/02/2014|08:11:00 PM|08:02:00 AM|  
|--1---|04/03/2014|08:10:00 PM|08:05:00 AM|  
|--1---|04/04/2014|08:10:00 PM|08:06:00 AM|  
|--1---|04/05/2014|08:10:00 PM|08:01:00 AM|  
|--1---|04/06/2014|08:08:00 PM|00:00:00 ----|

喜欢04/02/2014 MAX time 04/02/2014 Time_in and 04/03/2014 MIN Time 04/02/2014 Time_Out。

谢谢..

4 个答案:

答案 0 :(得分:0)

不确定你是如何查询的(存储过程,视图等),但这是一个通用的建议:

出于查询的目的,将Date和Time列合并为一列(datetime或smalldatetime类型)。现在找到最小值和最大值。你应该被设置!

答案 1 :(得分:0)

我可能误解了这个任务,但你可以像以下一样进行自我加入:

with t(t) as ( values '2014-04-01-08.03.00' ,'2014-04-02-08.07.00' ,'2014-04-02-08.11.00' ,'2014-04-03-08.02.00' ) select max(t1.t), min(t2.t) from t t1 join t t2 on date(t1.t) = date(t2.t) - 1 day group by date(t1.t)

FWIW如果您提供插入语句或cte(如上所述)的样本数据,您将获得更多答案。

答案 2 :(得分:0)

您可以将group byminmax

一起使用
select
  [Date],
  Min([Time]) As Time_In,
  Max([Time]) As Time_Out

from Table1

group by
  [Date]

另请注意,TimeDate是SQL Server中的保留字。您应该考虑重命名这些列。

答案 3 :(得分:0)

每个日期的最晚时间和第二天的最早时间:

WITH cte AS
 ( SELECT
      d,
      MIN(t) AS mint, 
      MAX(t) AS maxt
   FROM tab
   GROUP BY d
 )
SELECT
   t1.d,
   t1.maxt, 
   COALESCE(t2.mint, '00:00:00')
FROM cte AS t1 
LEFT JOIN cte AS t2
  ON t1.d = t2.d-1