2

假设我有一个带有 ID 标识列、一些数据和一个日期戳的表。像这样:

1   data    5/1/2013 12:30
2   data    5/2/2013 15:32
3   data    5/2/2013 16:45
4   data    5/3/2013 9:32
5   data    5/5/2013 8:21
6   data    5/4/2013 9:36
7   data    5/6/2013 11:42

如何编写一个查询来显示一条时间戳为 5/4 的记录?该表有数百万条记录。我已经做了一些搜索,但我不知道我要搜索什么。:/

4

2 回答 2

7
declare @t table(id int, bla char(4), timestamp datetime)
insert @t values
(1,'data','5/1/2013 12:30'),
(2,'data','5/2/2013 15:32'),
(3,'data','5/2/2013 16:45'),
(4,'data','5/3/2013 9:32'),
(5,'data','5/5/2013 8:21'),
(6,'data','5/4/2013 9:36'),
(7,'data','5/6/2013 11:42')

select timestamp
from
(
  select rn1 = row_number() over (order by id), 
  rn2 = row_number() over (order by timestamp), timestamp
  from @t 
) a
where rn1 not in (rn2, rn2-1)
于 2013-09-06T12:16:16.330 回答
0

在 2008 r2 中,这将是一种方式

DECLARE @Table AS TABLE
(id INT , ladate DATETIME)

INSERT INTO @Table VALUES (1, '2013-05-01')
INSERT INTO @Table VALUES (2, '2013-05-02')
INSERT INTO @Table VALUES (3, '2013-05-03')
INSERT INTO @Table VALUES (4, '2013-05-05')
INSERT INTO @Table VALUES (5, '2013-05-04')
INSERT INTO @Table VALUES (6, '2013-05-06')
INSERT INTO @Table VALUES (7, '2013-05-07')
INSERT INTO @Table VALUES (8, '2013-05-08')

--我按排序顺序添加了记录,但如果不是确保您在查询中排序

SELECT t2.ladate FROM @Table T1
INNER JOIN @Table T2 ON T1.Id = T2.Id + 1
INNER JOIN @Table t3 ON t2.id = t3.id + 1
WHERE t3.ladate < t2.ladate AND t2.ladate > t1.ladate

-- 我假设你的 ID 都在那里,1,2,3,4,5....没有丢失...如果缺少行号,你可以使用 row_number()

于 2013-09-06T12:00:12.927 回答