当前位置: 代码迷 >> Sql Server >> 有数据修改日志表,记录每次数据改变时的日期和数值,现在想得到每天的数值,问怎么实现
  详细解决方案

有数据修改日志表,记录每次数据改变时的日期和数值,现在想得到每天的数值,问怎么实现

热度:64   发布时间:2016-04-24 09:36:08.0
有数据修改日志表,记录每次数据改变时的日期和数值,现在想得到每天的数值,问如何实现。
数据修改日志,记录每次数据改变时的日期,现在想得到每天的数据。提供以下实例,望各位大侠帮忙解惑。
想得到的结果:


RQ                      V
----------------------- -----------
2014-01-01 00:00:00.000 10
2014-02-01 00:00:00.000 10
2014-03-01 00:00:00.000 10
2014-04-01 00:00:00.000 10
2014-05-01 00:00:00.000 50
2014-06-01 00:00:00.000 50
2014-07-01 00:00:00.000 50
2014-08-01 00:00:00.000 50
2014-09-01 00:00:00.000 50
2014-10-01 00:00:00.000 50
2014-11-01 00:00:00.000 50
2014-12-01 00:00:00.000 50



DECLARE @tb1 AS TABLE (RQ DATETIME)
INSERT INTO @tb1
SELECT DATEADD(MONTH,NUMBER,'2014-1-1') FROM [master]..SPT_VALUES WHERE [TYPE]='P' AND NUMBER<12

DECLARE @TB2 AS TABLE (RQ DATETIME,V INT)
INSERT INTO @TB2
SELECT '2014-1-1',10
UNION
SELECT '2014-5-1',50

SELECT * FROM @tb1
SELECT * FROM @TB2

RQ
-----------------------
2014-01-01 00:00:00.000
2014-02-01 00:00:00.000
2014-03-01 00:00:00.000
2014-04-01 00:00:00.000
2014-05-01 00:00:00.000
2014-06-01 00:00:00.000
2014-07-01 00:00:00.000
2014-08-01 00:00:00.000
2014-09-01 00:00:00.000
2014-10-01 00:00:00.000
2014-11-01 00:00:00.000
2014-12-01 00:00:00.000


RQ                      V
----------------------- -----------
2014-01-01 00:00:00.000 10
2014-05-01 00:00:00.000 50




------解决思路----------------------
SELECT T1.RQ,T3.V
FROM @tb1 T1
CROSS APPLY(
SELECT TOP 1 V FROM @TB2 T2
WHERE T1.RQ>=T2.RQ ORDER BY T2.RQ DESC
)T3

------解决思路----------------------
SELECT a.RQ,b.V 
FROM @tb1 AS a 
INNER JOIN @TB2 AS b ON a.RQ>=b.RQ
WHERE b.RQ=(SELECT MAX(RQ) FROM @TB2 WHERE RQ<=a.RQ)
  相关解决方案