求教一个SQL语句实现,也许有点难度。。 望不吝指教

jackyzgm 2006-02-25 09:16:29
table:

id time

a 2006-01-01 01:00:34 1
a 2006-01-01 01:00:33
a 2006-01-01 01:00:32
b 2006-01-01 01:00:31 2
b 2006-01-01 01:00:30
c 2006-01-01 01:00:20
c 2006-01-01 01:00:10
b 2006-01-01 01:00:04
b 2006-01-01 01:00:03 4
a 2006-01-01 01:00:02 3
a 2006-01-01 00:45:00
d 2006-01-01 00:40:50
f 2006-01-01 00:40:40
a 2006-01-01 00:30:30 5
a 2006-01-01 00:30:20
b 2006-01-01 00:30:10 6
b 2006-01-01 00:30:06
t 2006-01-01 00:30:03
...



如果已经查出 MAX(time) where id='a' 大于 MAX(time) where id='b' (记录 1,2)

那么需要查询最近一次 MAX(time) where id='a' 并且 必须 记录在 2 之后(时间比2早,即查出3)怎么查?

更进一步,查出3后,要查离 3最近且比3更新的(紧挨3)b的时间 4,怎么查到??

最后,需要查询整表得出的结果为:

flag time_a time_b

其中,flag标识 time_a 是否 大于 time_b ,重要的是, time_a ,time_b 必须是 1,2 或 3,4 这样成对的,符合以上所述规则的记录


由此下推,3,4 后面的 5,6 需要是 像 1,2那样 time_b时间比 time_a 时间早的

不知如何解决,

多谢!!
...全文
180 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
子陌红尘 2006-02-25
  • 打赏
  • 举报
回复
哦,没仔细看问题。
子陌红尘 2006-02-25
  • 打赏
  • 举报
回复
declare @t table(id char(1),time datetime)
insert into @t select 'a', '2006-01-01 01:00:34'-- 1
insert into @t select 'a', '2006-01-01 01:00:33'
insert into @t select 'a', '2006-01-01 01:00:32'
insert into @t select 'b', '2006-01-01 01:00:31'-- 2
insert into @t select 'b', '2006-01-01 01:00:30'
insert into @t select 'c', '2006-01-01 01:00:20'
insert into @t select 'c', '2006-01-01 01:00:10'
insert into @t select 'b', '2006-01-01 01:00:04'
insert into @t select 'b', '2006-01-01 01:00:03'-- 4
insert into @t select 'a', '2006-01-01 01:00:02'-- 3
insert into @t select 'a', '2006-01-01 00:45:00'
insert into @t select 'd', '2006-01-01 00:40:50'
insert into @t select 'f', '2006-01-01 00:40:40'
insert into @t select 'a', '2006-01-01 00:30:30'-- 5
insert into @t select 'a', '2006-01-01 00:30:20'
insert into @t select 'b', '2006-01-01 00:30:10'-- 6
insert into @t select 'b', '2006-01-01 00:30:06'
insert into @t select 't', '2006-01-01 00:30:03'

--1、
select
top 1 *
from
@t
where
id='a' and time<(select max(time) from @t where id='b')
order by time desc


--2、
select
top 1 *
from
@t
where
id='b'
and
(select
max(time)
from
@t
where
id='a' and time<(select max(time) from @t where id='b'))<time
order by time

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧