【发布时间】:2010-11-14 09:17:01
【问题描述】:
我有 2 张桌子:
表1
S/N OnId FromDate ToDate Value
aaa 1 2010-10-09 2010-10-15 ?
aaa 2 2010-10-10 2010-10-29 ?
bbb 1 2010-10-16 2010-10-20 ?
表2
Id Date Count
1 2010-10-03 100
2 2010-10-03 150
1 2010-10-08 200
2 2010-10-12 250
1 2010-10-13 300
1 2010-10-14 400
2 2010-10-17 450
1 2010-10-20 500
我需要从 Table2 中找到具有相同 Id 和小于 FromDate 的日期(称为“FromCount”)的最新计数,以及具有相同 Id 和小于 ToDate 的日期的最新计数(称为“ ToCount'),并用它们的差异更新 Table1 中的 Value 列。所以中间计算应该是这样的:
S/N OnId FromDate ToDate FromCount ToCount
aaa 1 2010-10-09 2010-10-15 200 400
aaa 2 2010-10-10 2010-10-29 150 450
bbb 1 2010-10-16 2010-10-20 400 500
在 UPDATE 之后,Table1 将如下所示:
表1
S/N OnId FromDate ToDate Value
aaa 1 2010-10-09 2010-10-15 200 (400-200)
aaa 2 2010-10-10 2010-10-29 300 (450-150)
bbb 1 2010-10-16 2010-10-20 100 (500-400)
之后我需要汇总相同 S/N 的所有值:
表3
S/N Total
aaa 500
bbb 100
我用的是sql server 2005,希望用sql成功,不需要全部写 这在我的 C# 应用程序中 :)
谢谢!!!
【问题讨论】:
-
Leon,您是卡在某个特定步骤上,还是需要帮助开始,还是想要整个解决方案?
-
真的不太清楚在哪种情况下要选择哪些行.....你能详细说明一下吗?对于
S/N=aaa和OnId=1- 您选择表 2 中的哪两行,为什么选择这两行?? -
对于 S/N=aaa 和 OnId=1 第 6 行和第 3 行。我需要计算 FromDate 和 ToDate 之间的计数差。对于 2010-10-15,最新计数来自 2010-10-14(第 6 行),对于 2010-10-09,最新计数来自 2010-10-8(第 3 行)。我知道如何使用 SELECT (TOP 1)...WHERE (date>=FromDate) ORDER BY DATE DESC 获取最新计数,但我不知道如何为 FromDate 和 ToDate 进行计算
标签: sql