任何人都请帮助我
如何使用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。
谢谢..
答案 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 by
与min
和max
select
[Date],
Min([Time]) As Time_In,
Max([Time]) As Time_Out
from Table1
group by
[Date]
另请注意,Time
和Date
是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