34,587
社区成员
发帖
与我相关
我的任务
分享
IF OBJECT_ID('[tb]') IS NOT NULL
DROP TABLE [tb]
GO
CREATE TABLE [tb] ([rdate] [datetime],[jq] [nvarchar](10),[sl] [int])
INSERT INTO [tb]
SELECT '2010-4-26','1号机','5657500' UNION ALL
SELECT '2010-4-27','1号机','5661330' UNION ALL
SELECT '2010-4-28','1号机','5661335' UNION ALL
SELECT '2010-4-29','1号机','5661339' UNION ALL
SELECT '2010-4-30','1号机','5661395' UNION ALL
SELECT '2010-5-4','1号机','5661401' UNION ALL
SELECT '2010-5-6','1号机','5662177'
SELECT * FROM tb
ALTER TABLE tb ADD id INT IDENTITY(1,1)
SELECT rdate,jq,
sl-isnull((SELECT sl FROM tb WHERE jq=a.jq AND id=a.id-1 AND rdate <a.rdate),0)
FROM tb a
----------------------------------------------------------------------------------
-- Author : htl258(Tony)
-- Date : 2010-05-07 11:20:09
-- Version: Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86)
-- Jul 9 2008 14:43:34
-- Copyright (c) 1988-2008 Microsoft Corporation
-- Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 3)
-- Blog : http://blog.csdn.net/htl258
----------------------------------------------------------------------------------
--> 生成测试数据表: [tb]
IF OBJECT_ID('[tb]') IS NOT NULL
DROP TABLE [tb]
GO
CREATE TABLE [tb] ([rdate] [datetime],[jq] [nvarchar](10),[sl] [int])
INSERT INTO [tb]
SELECT '2010-4-26','1号机','5657500' UNION ALL
SELECT '2010-4-27','1号机','5661330' UNION ALL
SELECT '2010-4-28','1号机','5661335' UNION ALL
SELECT '2010-4-29','1号机','5661339' UNION ALL
SELECT '2010-4-30','1号机','5661395' UNION ALL
SELECT '2010-5-4','1号机','5661401' UNION ALL
SELECT '2010-5-6','1号机','5662177'
--SELECT * FROM [tb]
-->SQL查询如下:
;with t as
(
select rn=row_number()over(partition by [jq] order by [rdate]),*
from tb
)
select a.[rdate],a.[jq],a.sl,a.sl-isnull(b.sl,a.sl) sldif
from t a
left join t b
on a.rn=b.rn+1 and a.jq=b.jq
/*
rdate jq sl sldif
----------------------- ---------- ----------- -----------
2010-04-26 00:00:00.000 1号机 5657500 0
2010-04-27 00:00:00.000 1号机 5661330 3830
2010-04-28 00:00:00.000 1号机 5661335 5
2010-04-29 00:00:00.000 1号机 5661339 4
2010-04-30 00:00:00.000 1号机 5661395 56
2010-05-04 00:00:00.000 1号机 5661401 6
2010-05-06 00:00:00.000 1号机 5662177 776
(7 行受影响)
*/
modify----------------------------------------------------------------------------------
-- Author : htl258(Tony)
-- Date : 2010-05-07 11:20:09
-- Version: Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86)
-- Jul 9 2008 14:43:34
-- Copyright (c) 1988-2008 Microsoft Corporation
-- Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 3)
-- Blog : http://blog.csdn.net/htl258
----------------------------------------------------------------------------------
--> 生成测试数据表: [tb]
IF OBJECT_ID('[tb]') IS NOT NULL
DROP TABLE [tb]
GO
CREATE TABLE [tb] ([rdate] [datetime],[jq] [nvarchar](10),[sl] [int])
INSERT INTO [tb]
SELECT '2010-4-26','1号机','5657500' UNION ALL
SELECT '2010-4-27','1号机','5661330' UNION ALL
SELECT '2010-4-28','1号机','5661335' UNION ALL
SELECT '2010-4-29','1号机','5661339' UNION ALL
SELECT '2010-4-30','1号机','5661395' UNION ALL
SELECT '2010-5-4','1号机','5661401' UNION ALL
SELECT '2010-5-6','1号机','5662177'
SELECT * FROM [tb]
-->SQL查询如下:
;with t as
(
select rn=row_number()over(partition by [jq] order by [rdate]),*
from tb
)
select a.[rdate],a.[jq],a.sl,a.sl-isnull(b.sl,0) sldif
from t a
left join t b
on a.rn=b.rn+1
/*
rdate jq sl sldif
----------------------- ---------- ----------- -----------
2010-04-26 00:00:00.000 1号机 5657500 5657500
2010-04-27 00:00:00.000 1号机 5661330 3830
2010-04-28 00:00:00.000 1号机 5661335 5
2010-04-29 00:00:00.000 1号机 5661339 4
2010-04-30 00:00:00.000 1号机 5661395 56
2010-05-04 00:00:00.000 1号机 5661401 6
2010-05-06 00:00:00.000 1号机 5662177 776
(7 行受影响)
*/
SELECT *,cz=sl-isnull((SELECT TOP 1 sl FROM tabledy WHERE jq=a.jq AND rdate<a.rdate ORDER BY rdate desc),0)
FROM tabledy a