[求语句]比较下一条某列值是否相等,显示出不相等的

zhiweixuexi6 2018-11-25 06:03:59
表数据如下
ID1 fID tID TXT Time
1 5 6 'aa' 2003-1-1
1 2 3 'bb' 2002-1-1
1 1 2 'cc' 2001-1-1
2 1 3 'dd' 2001-1-1
2 4 6 'ee' 2002-1-1
2 6 7 'ff' 2003-1-1
3 1 2 'gg' 2001-1-1
3 2 3 'hh' 2002-1-1
3 3 4 'ii' 2003-1-1
...


我想批量获取ID1相同的一组数据以Time排序后当前行的tID与下一条数据的fID不相同的当前行的ID1 fID tID TXT等数据,请问SQL语句如何写能获取这个数据集呢?
...全文
63 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
二月十六 2018-11-25
  • 打赏
  • 举报
回复
引用 8 楼 zhiweixuexi6 的回复:
可以了,我改成WHERE
a.tID <> b.fID or b.fID is null;就可以了,谢谢!
对,有null的问题
二月十六 2018-11-25
  • 打赏
  • 举报
回复
试试这个:
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([ID1] int,[fID] int,[tID] int,[TXT] nvarchar(22),[Time] Date)
Insert #T
select 1,5,6,N'aa','2003-1-1' union all
select 1,2,3,N'bb','2002-1-1' union all
select 1,1,2,N'cc','2001-1-1' union all
select 2,1,3,N'dd','2001-1-1' union all
select 2,4,6,N'ee','2002-1-1' union all
select 2,6,7,N'ff','2003-1-1' union all
select 3,1,2,N'gg','2001-1-1' union all
select 3,2,3,N'hh','2002-1-1' union all
select 3,3,4,N'ii','2003-1-1'
Go
--测试数据结束
;WITH cte as (
Select *,ROW_NUMBER()OVER(PARTITION BY ID1 ORDER BY Time) rn from #T
)
SELECT
a.ID1,a.fID,a.tID,a.TXT
FROM
cte a
LEFT JOIN
cte b
ON b.ID1 = a.ID1
AND a.rn + 1 = b.rn
WHERE
a.tID <> ISNULL(b.fID,-1);


zhiweixuexi6 2018-11-25
  • 打赏
  • 举报
回复
可以了,我改成WHERE
a.tID <> b.fID or b.fID is null;就可以了,谢谢!
zhiweixuexi6 2018-11-25
  • 打赏
  • 举报
回复
5楼的下一条数据相等的也显示出来了,只需要显示不相同的
zhiweixuexi6 2018-11-25
  • 打赏
  • 举报
回复
引用 4 楼 二月十六 的回复:
[quote=引用 3 楼 zhiweixuexi6 的回复:][quote=引用 1 楼 二月十六 的回复:]
1、按时间正序倒序排?
2、如果没有下一条数据算相同还是不同?


1.正序
2.没有下一条算不相同的
[/quote]看看2楼那个对不对[/quote]

2楼是对的,只是2楼的下一条没有数据了后当前行的数据没有查出来。
吉普赛的歌 2018-11-25
  • 打赏
  • 举报
回复
USE tempdb
GO
IF OBJECT_ID('dbo.[t]') IS NOT NULL 
	DROP TABLE dbo.[t]
GO
CREATE TABLE dbo.[t](
[ID1] INT
,[fID] INT
,[tID] INT
,[TXT] NVARCHAR(20)
,[Time] DATETIME	
)
GO
SET NOCOUNT ON
INSERT INTO dbo.[t] VALUES(N'1',N'5',N'6',N'aa',N'2003-1-1')
INSERT INTO dbo.[t] VALUES(N'1',N'2',N'3',N'bb',N'2002-1-1')
INSERT INTO dbo.[t] VALUES(N'1',N'1',N'2',N'cc',N'2001-1-1')
INSERT INTO dbo.[t] VALUES(N'2',N'1',N'3',N'dd',N'2001-1-1')
INSERT INTO dbo.[t] VALUES(N'2',N'4',N'6',N'ee',N'2002-1-1')
INSERT INTO dbo.[t] VALUES(N'2',N'6',N'7',N'ff',N'2003-1-1')
INSERT INTO dbo.[t] VALUES(N'3',N'1',N'2',N'gg',N'2001-1-1')
INSERT INTO dbo.[t] VALUES(N'3',N'2',N'3',N'hh',N'2002-1-1')
INSERT INTO dbo.[t] VALUES(N'3',N'3',N'4',N'ii',N'2003-1-1')

;WITH cte AS (
	SELECT ROW_NUMBER () OVER (PARTITION BY id1 ORDER BY [Time]) AS rid,* FROM t 
)
SELECT a.* FROM cte AS a INNER JOIN cte AS b ON a.id1=b.id1 AND a.rid=b.rid-1 AND a.fid!=b.fid
二月十六 2018-11-25
  • 打赏
  • 举报
回复
引用 3 楼 zhiweixuexi6 的回复:
[quote=引用 1 楼 二月十六 的回复:]
1、按时间正序倒序排?
2、如果没有下一条数据算相同还是不同?


1.正序
2.没有下一条算不相同的
[/quote]看看2楼那个对不对
zhiweixuexi6 2018-11-25
  • 打赏
  • 举报
回复
引用 1 楼 二月十六 的回复:
1、按时间正序倒序排?
2、如果没有下一条数据算相同还是不同?


1.正序
2.没有下一条算不相同的
二月十六 2018-11-25
  • 打赏
  • 举报
回复
根据测试数据得到这样的结果,看看对吗?
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([ID1] int,[fID] int,[tID] int,[TXT] nvarchar(22),[Time] Date)
Insert #T
select 1,5,6,N'aa','2003-1-1' union all
select 1,2,3,N'bb','2002-1-1' union all
select 1,1,2,N'cc','2001-1-1' union all
select 2,1,3,N'dd','2001-1-1' union all
select 2,4,6,N'ee','2002-1-1' union all
select 2,6,7,N'ff','2003-1-1' union all
select 3,1,2,N'gg','2001-1-1' union all
select 3,2,3,N'hh','2002-1-1' union all
select 3,3,4,N'ii','2003-1-1'
Go
--测试数据结束
;WITH cte as (
Select *,ROW_NUMBER()OVER(PARTITION BY ID1 ORDER BY Time) rn from #T
)
SELECT
a.ID1,a.fID,a.tID,a.TXT
FROM
cte a
LEFT JOIN
cte b
ON b.ID1 = a.ID1
AND a.rn + 1 = b.rn
WHERE
a.tID <> b.fID;


二月十六 2018-11-25
  • 打赏
  • 举报
回复
1、按时间正序倒序排?
2、如果没有下一条数据算相同还是不同?

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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