我有一个要求,我需要获得与当前记录的最小时差的记录。 让我们假设在表中我有插入日期,组ID和Id列。 我选择了一条记录而不想获得另一条记录,其中所选记录的插入日期与另一条记录之间的差异为分钟。
我尝试了外部应用,但该查询需要永远运行。
查询:
select e.id
from B.Emp t
where id = 5
outer apply (
select top 1 *
from B.Emp
where t.group_id = group_id
order by insert_time desc ) e
答案 0 :(得分:1)
select * From B.Emp emp
Inner Join
(
select MAX(emp1.insert_time) maxTime, emp1.id From B.Emp emp1 group by emp1.id
) maxDateRec ON maxDateRec.id = emp.id AND maxDateRec.maxTime = emp.insert_time
where emp.id = 5
尝试使用第二个。
答案 1 :(得分:0)
此查询未经过测试。 请回复我是否有任何错误或需要在查询中进行更改。
CREATE TABLE Emp
(
group_Id INT,
ID INT,
date DATETIME
)
INSERT INTO EMP
(group_Id,ID,date)
values
(1,5,'11-Jan-2014'),
(1,5,'12-Jan-2014')
-
select ID,date from Emp t
group by
ID,
date having id = 5
and
date =
(select max(date) from Emp where id = 5)
答案 2 :(得分:0)
如果您确实想要为所选记录组找到最接近的插入时间,无论方向如何,那么这样的事情可能有所帮助:
select t.insert_date, ca.*
from B.Emp t
outer apply (
select top (1) * from B.Emp e
where e.group_id = t.group_id
and e.id != t.id
order by abs(datediff(ms, t.insert_date, e.insert_date))
) ca
where t.Id = 5;
编辑:但您肯定需要检查索引选项。对于初学者,假设您在Id
列上有一个群集主键,这应该会有所帮助:
create index [IX_B_Emp_GroupInsert] on B.Emp (group_id, insert_time);