Sql server 涉及日期操纵的Select语句(最早的中间最晚的)

Sql server 涉及日期操纵的Select语句(最早的中间最晚的),sql-server,select,Sql Server,Select,我有这个表,主页上的用户将选择一个fa id,该id将能够打印特定数据的数据。现在,我想要实现的是能够使用相同的FAID打印数据,例如,是1,并且我能够获得用户ID 6(Eff_from=2/3/2012),这是FAID=1(Eff_to(2/2/2012)的下一个日期 使用此代码,我只能打印后一个FAID的最新日期。请尝试以下操作:- Declare @FA_Laptop table (FAID int,LaptopID int,userId int,Eff_from date,Eff_to

我有这个表,主页上的用户将选择一个fa id,该id将能够打印特定数据的数据。现在,我想要实现的是能够使用相同的FAID打印数据,例如,是1,并且我能够获得用户ID 6(Eff_from=2/3/2012),这是FAID=1(Eff_to(2/2/2012)的下一个日期

使用此代码,我只能打印后一个FAID的最新日期。请尝试以下操作:-

Declare @FA_Laptop table 
(FAID int,LaptopID int,userId int,Eff_from date,Eff_to date)

Insert into @FA_Laptop
values
(1,39,1,'1/1/2012','2/2/2012'),
(2,39,4,'5/5/2012','7/7/2012'),
(3,39,6,'2/3/2012','5/4/2012'),
(4,39,8,'7/8/2012','12/24/2012')

;with cte as
(
 Select FAID,LaptopID,userID,Eff_to
 from @FA_Laptop where FAID=1 //Get the value from your PHP page
)
Select c.faid,f.faid as nextFAID,c.userID,f.userId as nextUserID,c.laptopId,
f.laptopId as nextLaptopID from cte c  left join   @FA_Laptop f 
on f.Eff_from=dateadd(day,1,c.eff_to)

Result :

faid  nextFAID  userID    nextUserID    laptopId    nextLaptopID
 1      3             1      6            39               39
使用子查询

Select temp.faid,temp.userID,f.userId as nextUserID,temp.laptopId,
f.laptopId as nextLaptopID
from 
(
Select FAID,LaptopID,userID,Eff_to
from @FA_Laptop where FAID=1
) temp  
left join   @FA_Laptop f 
on f.Eff_from=dateadd(day,1,temp.eff_to)
更新:

SELECT  temp.LaptopID, temp.Eff_to,f.userId as nextUserID,
        f.laptopId as nextLaptopID
FROM    dbo.users a
inner join 
(
  Select FAID,LaptopID,userID,Eff_to
  from FA_Laptop where FAID=$faidf
) temp
on a.userID = temp.UserID
left join   FA_Laptop f 
on f.Eff_from=dateadd(day,1,temp.eff_to)
更新2:

检查结果

问题是

SELECT  fl.userId as nextUserID,fl.eff_from,
        fl.laptopId as nextLaptopID
FROM  FA_Laptop f
inner join   FA_Laptop fl 
on fl.Eff_from=dateadd(day,1,f.eff_to) and f.faid=$faidf
inner join users a
on a.userID=fl.userID

你能把这个例子和问题说得更清楚一点吗?我不太明白。你需要一种日期链吗?你有哪个版本的Sql Server?把问题更新为好的,先生。我想做的是当一个用户选择FAID=1时,它有效力(2012年2月2日)它将显示日期为下一个2012年2月2日的FAID=3。这些日期只是随机样本。对不起,我的好先生,但我不知道这是什么,只能勉强分析。你能简化它或将它与我的“尝试”联系起来吗上面的代码?对不起,我觉得这听起来很粗鲁,但我非常感谢,尽管我想我知道什么对我的大脑来说太多了,他请告诉我用户表中有什么数据,如果你能发布你想要的结果,那就更好了用户表有userID(PK),EmployeeName,EmployeeID。我想要的结果是,当用户选择FAID 1时,它将显示FAID 1(2012年2月2日)生效日期为“下一个”的员工,FAID 3的生效日期为2012年2月3日。我想显示FAID 3的用户,其生效日期为“下一个”dateCheck Update2。我已经用sql FIDLE创建了查询。请告诉我结果是否正确
SELECT  fl.userId as nextUserID,fl.eff_from,
        fl.laptopId as nextLaptopID
FROM  FA_Laptop f
inner join   FA_Laptop fl 
on fl.Eff_from=dateadd(day,1,f.eff_to) and f.faid=$faidf
inner join users a
on a.userID=fl.userID