【发布时间】:2016-02-08 08:32:00
【问题描述】:
我有一个帐户列表及其费用,每隔几天就会发生变化。 在此列表中,每次成本更新为新的时,我只有开始日期,但没有结束日期的列。 这意味着,我需要填充日期列表,当特定帐户和费用的结束日期应被推断为具有新费用的同一帐户的开始日期时。
差不多这样:
帐户开始日期费用
一个 2016 年 1 月 1 日 100 美元
两个 2016 年 1 月 1 日 150 美元
一个 2016 年 4 月 1 日 200 美元
两个 2016 年 3 月 1 日 200 美元
我需要的结果是:
帐户 日期 成本
一个 2016 年 1 月 1 日 100 美元
一个 2016 年 2 月 1 日 100 美元
一个 2016 年 3 月 1 日 100 美元
一个 2016 年 4 月 1 日 200 美元
两个 2016 年 1 月 1 日 150 美元
两个 2016 年 2 月 1 日 150 美元
两个 2016 年 3 月 1 日 200 美元
例如,如果成本在月中发生变化,那么样本数据将仅保存两条记录(每个账户-开始日期-成本的唯一组合各一条),而结果将保存 30 条记录每月每一天的费用(第一次费用为 15,第二次费用为 15)。成本是给定的,无需计算(手动插入)。
请注意,结果包含更多记录,因为示例数据仅显示该帐户截至该日期的开始日期和更新成本。结果显示了当月每一天的成本。
有什么想法吗?
【问题讨论】:
-
这个优化怎么样?
-
如果您知道如何在有开始和结束日期时进行填充,那么只需按您的帐户选择 max(date) 和 min(date) 组,您就会有开始和结束日期跨度>
-
@t-clausen.dk:我们应该将不存在的查询优化为有效的查询。
-
问题也不是很清楚。请详细说明您的要求。解释规则,为什么您的结果包含比样本数据更多的记录?费用呢,如何计算?
-
@TimSchmelter 这个问题并不难理解。解决方案可能有点困难
标签: sql-server