Sql server 2005 从sql server中的同一个表中检索最小和最大时间
我有一张表,有签到和注销的价值Sql server 2005 从sql server中的同一个表中检索最小和最大时间,sql-server-2005,Sql Server 2005,我有一张表,有签到和注销的价值 **id Date Time Status** 01 1/02/12 8:10 Entry 01 1/02/12 9:00 Exit 01 1/02/12 9:10 entry 01 1/02/12 17:00 Exit 02 1/02/12 8:10 Entry 02 1/02/12 9:00 Exit 02 1/02/12 9:10 entry
**id Date Time Status**
01 1/02/12 8:10 Entry
01 1/02/12 9:00 Exit
01 1/02/12 9:10 entry
01 1/02/12 17:00 Exit
02 1/02/12 8:10 Entry
02 1/02/12 9:00 Exit
02 1/02/12 9:10 entry
02 1/02/12 17:00 Exit
**03 1/02/12 17:00 Exit**
我只需要找出每个id的最小和最大时间
预期结果
**id Date Entry Exit **
01 1/02/12 8:10 17:00
02 1/02/12 8:10 17:00
请帮帮我
此代码工作正常,但如果未添加一个条目,则只添加出口
我想展示一下
id Date Entry Exit
---- -------- ----- -----
01 01/02/12 08:10 17:00
02 01/02/12 08:10 17:00
**03 01/02/12 Null 17:00**
请帮帮我
提前感谢写一个如下的查询
Select * from MyTable where Time = (Select min(Time) from MyTable) and Status = 'Entry'
及
编辑:
如果您希望对这样的值进行单个查询,可以按如下方式获得
SELECT DISTINCT MyTable.ID, MyTable.Date, MyTable.Time AS Entry, MyTable_2.Time AS
[Exit] FROM MyTable CROSS JOIN MyTable AS MyTable_2 WHERE (MyTable.Time =
(SELECT MIN(Time) AS Expr1 FROM MyTable AS MyTable_1)) AND (MyTable.Status = 'Entry')
AND (MyTable_2.Time = (SELECT MAX(Time) AS Expr2 FROM MyTable AS MyTable_3)) AND
(MyTable_2.Status = 'Exit')
根据使用的数据类型,类似的操作可能会起作用
declare @T table
(
id varchar(2),
[Date] datetime,
[Time] varchar(5),
[Status] varchar(5)
)
insert into @T
select '01', '1/02/12', '8:10', 'Entry' union all
select '01', '1/02/12', '9:00', 'Exit' union all
select '01', '1/02/12', '9:10', 'entry' union all
select '01', '1/02/12', '17:00', 'Exit' union all
select '02', '1/02/12', '8:10', 'Entry' union all
select '02', '1/02/12', '9:00', 'Exit' union all
select '02', '1/02/12', '9:10', 'entry' union all
select '02', '1/02/12', '17:00', 'Exit'
select id,
convert(varchar(8), [Date], 1) as [Date],
convert(varchar(5), min([Time]), 108) as [Entry],
convert(varchar(5), max([Time]), 108) as [Exit]
from
(
select id,
[Date],
cast([Time] as datetime) as [Time],
row_number() over(partition by id order by [Date]+cast([Time] as datetime) asc) as rn1,
row_number() over(partition by id order by [Date]+cast([Time] as datetime) desc) as rn2
from @T
) as T
where T.rn1 = 1 or
T.rn2 = 1
group by id, [Date]
结果:
id Date Entry Exit
---- -------- ----- -----
01 01/02/12 08:10 17:00
02 01/02/12 08:10 17:00
您的专栏的数据类型是什么?@kknaufal-很高兴听到。然后你应该考虑把答案作为正确的答案,用左边的复选标记。这将向社区发出信号,表明这个问题已经得到了回答。
id Date Entry Exit
---- -------- ----- -----
01 01/02/12 08:10 17:00
02 01/02/12 08:10 17:00