2014-05-11 46 views
0

任何人都请帮助我在SQL Server中的最大日期和最短日期

如何使用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 ----| 

像2014年4月2日MAX时间2014年4月2日Time_in和04/03/2014 MIN时间04/02/2014 Time_Out。

谢谢..

+0

是你的ID真的都一样? – hvd

+0

你知道吗,我会发现结果数据集非常具有误导性 - 最终看起来像“超时”是同一天,但它确实属于**下一个**日。你为什么要这样显示它?如果产生的“Time Out”在“Time In”之前会发生什么?如果有差距(即4/5没有条目),应该发生什么?如果最后一个结果行真的有'null'(这是数据是什么)? ...哦,什么版本的SQL Server? –

回答

0

不知道你是如何查询本(存储过程,视图等),但这里是一个普通的通知:

您的查询的目的,结合日期和将时间列放入一列(类型为datetime或smalldatetime)。现在找到最小值和最大值。你应该设置!

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你会得到更多的答案,如果您提供的样本数据,无论是插入语句或热膨胀系数(如上面)。

0

您可以使用group byminmax

select 
    [Date], 
    Min([Time]) As Time_In, 
    Max([Time]) As Time_Out 

from Table1 

group by 
    [Date] 

还要注意的是TimeDate被保留在SQL服务器的话。您应该考虑重命名这些列。

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