【发布时间】:2013-04-27 20:38:19
【问题描述】:
如果我有一张像这样的表
begin date end date data
2013-01-01 2013-01-04 7
2013-01-05 2013-01-06 9
我怎样才能让它像这样被退回......
date data
2013-01-01 7
2013-01-02 7
2013-01-03 7
2013-01-04 7
2013-01-05 9
2013-01-06 9
我想做的一件事是创建另一个只有所有日期的表,然后使用 date>=begin date 和 date<=end date 将只有日期的表加入到上表中,但这似乎有点笨拙维护那个额外的表格,除了重复的日期之外什么都没有。
在某些情况下,我没有数据范围,只有as of 日期,这基本上看起来像我的第一个示例,但没有end date。 end date 隐含在下一行的“截至”日期中(即结束日期应该是下一行的as of -1)。我对此有一个“解决方案”,它使用 row_number() 函数来获取下一个值,但我怀疑这种方法,我这样做的方式有一堆嵌套的自连接,会导致查询时间很长。
【问题讨论】:
-
您正在重新解释数据,您不应该使用 SQL。在业务逻辑端,这是额外的 2~3 行代码,而不会使数据库负担一些它从来没有想过能够轻松完成的事情。
-
@Niels 你说哪一部分不应该发生在 SQL 服务器上?你是说我应该以我希望它显示的格式存储我的数据,或者我应该使用 SQL 服务器之外的另一个进程以我想要的格式生成输出?
-
不,您应该像现在一样以标准化的正确可索引方式将数据存储在数据库中。演示不是数据库的任务,所以在调用代码中这样做。