id ip
1 a
2 b
3 c
5 d
6 a
其中id自增(有可能被删除,所以不能用id相减),比如最近一条记录ip是a,经过查询,最近一次出现a是id为1的记录。之间间隔了4条记录。
特来求大伙来帮给个思路,谢谢了。
------解决方案--------------------
DECLARE @t Table (
ID INT NOT NULL,
IP varchar(200) NOT NULL
)
INSERT @t
SELECT 1 AS [ID], 'a' AS [IP]
UNION ALL
SELECT 2 AS [ID], 'c' AS [IP]
UNION ALL
SELECT 3 AS [ID], 'b' AS [IP]
UNION ALL
SELECT 5 AS [ID], 'd' AS [IP]
UNION ALL
SELECT 6 AS [ID], 'a' AS [IP]
UNION ALL
SELECT 8 AS [ID], 'c' AS [IP]
UNION ALL
SELECT 9 AS [ID], 'b' AS [IP]
SELECT COUNT(t.ID)
FROM @t t , (SELECT L.ID AS LastID, ISNULL(S.ID,0) AS SecondID
FROM (SELECT TOP 1 ID, IP FROM @t t WHERE IP='a' ORDER BY ID DESC) L
OUTER APPLY (SELECT TOP 1 ID FROM @t t WHERE IP='a' AND ID<>L.ID ORDER BY ID DESC) S
) O
WHERE t.ID >=O.SecondID AND t.ID<O.LastID
------解决方案--------------------
既然2008,你用row_number在查找的时候生成一个连续的序列,就可以获取顺序的
------解决方案--------------------
DECLARE @t Table (
ID INT NOT NULL,
IP varchar(200) NOT NULL
)
INSERT @t
SELECT 1 AS [ID], 'a' AS [IP]
UNION ALL
SELECT 2 AS [ID], 'c' AS [IP]
UNION ALL
SELECT 3 AS [ID], 'b' AS [IP]
UNION ALL
SELECT 5 AS [ID], 'd' AS [IP]
UNION ALL
SELECT 6 AS [ID], 'a' AS [IP]
UNION ALL
SELECT 8 AS [ID], 'c' AS [IP]
UNION ALL
SELECT 9 AS [ID], 'b' AS [IP]
UNION ALL
SELECT 15 AS [ID], 'b' AS [IP]
UNION ALL
SELECT 18 AS [ID], 'd' AS [IP]
select r.IP,r2.Counts
from (
select IP,MAX(ID) as MaxId,MIN(id) MinId from @t
group by IP ) r
Outer Apply (
select COUNT(1) as Counts from @t where ID between r.MinId and r.MaxId -1
) r2
比1楼简单点