我正在尝试编写查询,并且正在使用一个card_nr。例如:
Declare @card_nr as nvarchar(50)
set @card_nr = '704487442952000472'
select
a.times, b.times
from
(select
stat_id, times
from info
where card_nr = @card_nr) as a
left outer join
(select
stat_id, times
from info
where card_nr = @card_nr) as b on a.stat_id = b.stat_id+1
我得到了正确的结果:
2014-02-04 11:20:00.000 NULL
2014-02-06 09:44:00.000 2014-02-04 11:20:00.000
2014-02-12 09:59:00.000 2014-02-06 09:44:00.000
2014-02-13 10:31:00.000 2014-02-12 09:59:00.000
2014-02-21 09:49:00.000 2014-02-13 10:31:00.000
我想从表格列表中为每个card_nr
执行此操作。所以,首先我写了这个函数:
alter FUNCTION tabletest
( @card_nr as nvarchar(50))
RETURNS smalldatetime
AS BEGIN
Declare @sqldata as smalldatetime
select
@sqldata = b.times
from
(select
stat_id, times
from info where card_nr = @card_nr) as a
left outer join
(select
stat_id, times
from info where card_nr = @card_nr ) as b on a.stat_id = b.stat_id + 1
RETURN @datas
END
在我尝试的功能之后选择我的查询:
select name, times, dbo.tabletest(card_nr)
from dbo.info
我的结果不正确:
User1 2014-02-04 11:20:00.000 2014-02-21 09:49:00
User1 2014-02-06 09:44:00.000 2014-02-21 09:49:00
User1 2014-02-12 09:59:00.000 2014-02-21 09:49:00
User1 2014-02-13 10:31:00.000 2014-02-21 09:49:00
User1 2014-02-21 09:49:00.000 2014-02-21 09:49:00
User2 2014-02-14 13:41:00.000 2014-02-28 12:20:00
User2 2014-02-24 11:46:00.000 2014-02-28 12:20:00
User2 2014-02-28 12:20:00.000 2014-02-28 12:20:00
我想得到这个:
User1 2014-02-04 11:20:00.000 NULL
User1 2014-02-06 09:44:00.000 2014-02-04 11:20:00.000
User1 2014-02-13 10:31:00.000 2014-02-12 09:59:00.000
User1 2014-02-13 10:31:00.000 2014-02-12 09:59:00.000
User1 2014-02-21 09:49:00.000 2014-02-13 10:31:00.000
User2 2014-02-14 13:41:00.000 NULL
User2 2014-02-24 11:46:00.000 2014-02-14 13:41:00.000
User2 2014-02-28 12:20:00.000 2014-02-24 11:46:00.000
答案 0 :(得分:0)
应该可以仅使用表格信息获得所需的结果:
select name, times,
(select max(times) from info i2 where i2.times<i1.times and i1.name=i2.name and i2.card_nr=@card_nr )
from info i1
where card_nr=@card_nr