请教一个SQL查询问题

spvirus 2015-07-06 10:43:28
请教各位大哥一个问题: 我想查询的结果是一个聊天的记录。
例如:
1. 用户1向用户2发起一条记录,但用户2没有回复用户1,。则不现实查询结果
2.用户3发起一条记录,用户4回复了。则查询出 user1 和user2 就行了。
3.用户2向用户3发起了记录,但是用户3回复的时候 已经超过1小时了。则不现实查询结果


create table #table1(
user1 varchar(8),
user2 varchar(8),
date datetime
)

insert into #table1 values
('用户1','用户2',GETDATE()),
('用户1','用户2',GETDATE()),
('用户3','用户4',GETDATE()),
('用户4','用户3',GETDATE()),
('用户4','用户3',GETDATE()),
('用户5','用户6',GETDATE()),
('用户6','用户5',GETDATE()),
('用户6','用户5',GETDATE()),
('用户2','用户3',GETDATE()),
('用户2','用户3',GETDATE()),
('用户2','用户3',GETDATE()),
('用户3','用户2','2015-07-05 10:37:17.183'),
('用户3','用户2','2015-07-05 10:38:17.183')

上面这些数据,我需要的结果 就是 ('用户3','用户4',GETDATE()),('用户5','用户6',GETDATE()),2条记录有效
请各位大哥帮帮忙,这个sql 应该怎么写!
...全文
85 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
雨夹雪 2015-07-06
  • 打赏
  • 举报
回复
With ct
As
(
Select *,ROW_NUMBER() Over(Order By (Select 1 )) As id
From #table1
)
Select user1,user2,date
From
(
Select *,Case When Exists(
Select * From ct Where a.user1=user2 And a.user2=user1 And
a.id<=id And DATEDIFF(HH,date,a.date)<=1) Then 1 Else 0 End As x
From ct a
) s
Where x=1
spvirus 2015-07-06
  • 打赏
  • 举报
回复
引用 1 楼 mxbing1984 的回复:
With ct As ( Select *,ROW_NUMBER() Over(Order By (Select 1 )) As id From #table1 ) Select user1,user2,date From ( Select *,Case When Exists( Select * From ct Where a.user1=user2 And a.user2=user1 And a.id<=id And DATEDIFF(HH,date,a.date)<=1) Then 1 Else 0 End As x From ct a ) s Where x=1
嗯,谢谢你了。。。看了你的sql,算是开眼界了。谢谢了。。我把你的查询结果去重了。已经解决问题。

34,591

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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