【发布时间】:2014-05-22 16:34:18
【问题描述】:
我在 MS SQL Server 中有两个表:
dailyt - 包含每日数据:
date val
---------------------
2014-05-22 10
2014-05-21 9.5
2014-05-20 9
2014-05-19 8
2014-05-18 7.5
etc...
还有periodt - 包含不定期传入的数据:
date val
---------------------
2014-05-21 2
2014-05-18 1
给定dailyt 中的一行,我想通过将periodt 中的相应值与dailyt 行的日期之前或等于最接近的日期相加来调整其值。所以,输出看起来像:
addt
date val
---------------------
2014-05-22 12 <- add 2 from 2014-05-21
2014-05-21 11.5 <- add 2 from 2014-05-21
2014-05-20 10 <- add 1 from 2014-05-18
2014-05-19 9 <- add 1 from 2014-05-18
2014-05-18 8.5 <- add 1 from 2014-05-18
我知道这样做的一种方法是在 periodt.date <= dailyt.date 上加入 dailyt 和 periodt 表,然后施加 ROW_NUMBER() (PARTITION BY dailyt.date ORDER BY periodt.date DESC) 条件,然后在行号上添加 WHERE 条件 = 1.
还有其他更有效的方法吗?或者这是非常理想的?
【问题讨论】:
标签: sql sql-server tsql date