求SQL语句,接续重复的只要一笔记录
求SQL语句,连续重复的只要一笔记录
求Attr1连续重复的只要一笔记录
最后结果为:
2014-03-01 F01 衬衣 01 01
2014-03-03 F01 衬衣 02 03
2014-03-04 F01 衬衣 04 03
2014-03-05 F01 衬衣 05 03
2014-03-06 F01 衬衣 01 02
2014-03-08 F01 衬衣 05 04
2014-03-09 F01 衬衣 01 02
目的查看商品Attr1变动历史。
2号、6号两天Attr1属性未变动所以要去掉。
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
求Attr1连续重复的只要一笔记录
CREATE TABLE [dbo].[ProductVersion](
[VersionNo] [varchar](10) NULL,
[ProductId] [varchar](10) NULL,
[ProductName] [varchar](30) NULL,
[Attr1] [varchar](10) NULL,
[Attr2] [varchar](10) NULL
)
INSERT INTO dbo.ProductVersion
SELECT '2014-03-01', 'F01', '衬衣', '01', '01'
UNION ALL SELECT '2014-03-02', 'F01', '衬衣', '01', '03'
UNION ALL SELECT '2014-03-03', 'F01', '衬衣', '02', '03'
UNION ALL SELECT '2014-03-04', 'F01', '衬衣', '04', '03'
UNION ALL SELECT '2014-03-05', 'F01', '衬衣', '05', '03'
UNION ALL SELECT '2014-03-06', 'F01', '衬衣', '01', '02'
UNION ALL SELECT '2014-03-07', 'F01', '衬衣', '01', '04'
UNION ALL SELECT '2014-03-08', 'F01', '衬衣', '05', '04'
UNION ALL SELECT '2014-03-09', 'F01', '衬衣', '01', '02'
最后结果为:
2014-03-01 F01 衬衣 01 01
2014-03-03 F01 衬衣 02 03
2014-03-04 F01 衬衣 04 03
2014-03-05 F01 衬衣 05 03
2014-03-06 F01 衬衣 01 02
2014-03-08 F01 衬衣 05 04
2014-03-09 F01 衬衣 01 02
目的查看商品Attr1变动历史。
2号、6号两天Attr1属性未变动所以要去掉。
------解决方案--------------------
DECLARE @ProductVersion TABLE (
[VersionNo] [varchar](10) NULL,
[ProductId] [varchar](10) NULL,
[ProductName] [varchar](30) NULL,
[Attr1] [varchar](10) NULL,
[Attr2] [varchar](10) NULL
)
INSERT INTO @ProductVersion
SELECT '2014-03-01', 'F01', '衬衣', '01', '01'
UNION ALL SELECT '2014-03-02', 'F01', '衬衣', '01', '03'
UNION ALL SELECT '2014-03-03', 'F01', '衬衣', '02', '03'
UNION ALL SELECT '2014-03-04', 'F01', '衬衣', '04', '03'
UNION ALL SELECT '2014-03-05', 'F01', '衬衣', '05', '03'
UNION ALL SELECT '2014-03-06', 'F01', '衬衣', '01', '02'
UNION ALL SELECT '2014-03-07', 'F01', '衬衣', '01', '04'
UNION ALL SELECT '2014-03-08', 'F01', '衬衣', '05', '04'
UNION ALL SELECT '2014-03-09', 'F01', '衬衣', '01', '02'
;WITH CTE_Version AS(
SELECT [VersionNo], [ProductId], [ProductName],[Attr1], [Attr2], ROW_NUMBER() OVER(ORDER BY CONVERT(Date,[VersionNo],120)) AS RN FROM @ProductVersion )
SELECT [VersionNo], [ProductId], [ProductName],[Attr1], [Attr2]
FROM CTE_Version V
WHERE NOT EXISTS (SELECT * FROM CTE_Version WHERE RN = V.RN-1 AND Attr1 = V.Attr1 )
ORDER BY V.RN
------解决方案--------------------
CREATE TABLE #ProductVersion(
[VersionNo] [varchar](10) NULL,
[ProductId] [varchar](10) NULL,
[ProductName] [varchar](30) NULL,
[Attr1] [varchar](10) NULL,
[Attr2] [varchar](10) NULL
)
INSERT INTO #ProductVersion
SELECT '2014-03-01', 'F01', '襯衣', '01', '01'
UNION ALL SELECT '2014-03-02', 'F01', '襯衣', '01', '03'
UNION ALL SELECT '2014-03-03', 'F01', '襯衣', '02', '03'
UNION ALL SELECT '2014-03-04', 'F01', '襯衣', '04', '03'
UNION ALL SELECT '2014-03-05', 'F01', '襯衣', '05', '03'
UNION ALL SELECT '2014-03-06', 'F01', '襯衣', '01', '02'
UNION ALL SELECT '2014-03-07', 'F01', '襯衣', '01', '04'
UNION ALL SELECT '2014-03-08', 'F01', '襯衣', '05', '04'
UNION ALL SELECT '2014-03-09', 'F01', '襯衣', '01', '02'
select a.* from #ProductVersion a
where not exists (select * from #ProductVersion b
where REPLACE( b.VersionNo,'-','') =replace(a.VersionNo,'-','') -1 and a.Attr1 =b.Attr1 )
drop table #ProductVersion
------解决方案--------------------
CREATE TABLE [dbo].[ProductVersion](
[VersionNo] [varchar](10) NULL,
[ProductId] [varchar](10) NULL,
[ProductName] [varchar](30) NULL,
[Attr1] [varchar](10) NULL,
[Attr2] [varchar](10) NULL
)
INSERT INTO dbo.ProductVersion
SELECT '2014-03-01', 'F01', '衬衣', '01', '01'
UNION ALL SELECT '2014-03-02', 'F01', '衬衣', '01', '03'
UNION ALL SELECT '2014-03-03', 'F01', '衬衣', '02', '03'
UNION ALL SELECT '2014-03-04', 'F01', '衬衣', '04', '03'
UNION ALL SELECT '2014-03-05', 'F01', '衬衣', '05', '03'
UNION ALL SELECT '2014-03-06', 'F01', '衬衣', '01', '02'
UNION ALL SELECT '2014-03-07', 'F01', '衬衣', '01', '04'
UNION ALL SELECT '2014-03-08', 'F01', '衬衣', '05', '04'
UNION ALL SELECT '2014-03-09', 'F01', '衬衣', '01', '02'
--SELECT * FROM dbo.ProductVersion