【发布时间】:2012-06-11 13:21:09
【问题描述】:
对于这个问题,假设我有一个包含以下数据的表:
1) 名称 2) 心情 3) 日期时间
我可以插入如下记录:
Andy Happy '11.06.2012 - 14.06.07' -- Inserted on 11.06.2012 @ 19:12.32
Arthur Angry '11.06.2012 - 15.06.57' -- Inserted on 11.06.2012 @ 17:12.32
Andy Sad '11.06.2012 - 14.34.05' -- Inserted on 11.06.2012 @ 17:12.32
Arthur Happy '11.06.2012 - 13.34.05' -- Inserted on 11.06.2012 @ 14:12.32
我想获取与这些情绪变化相关的“持续时间”信息!
我的表包含数千条记录,我无法承受需要花费太多时间的过程。计算这个的最佳方法是什么?
- 触发“插入后”,填充“持续时间”列?
- 填充先前创建的“持续时间”列的存储过程?
- 计算列?
- 一个视图(我已经试过了,显示时间超过 2 秒,完全不能接受)
- 另一个想法?
感谢您的帮助!
重要编辑: 情绪记录分组到数据包中,我们不能确定已经插入的记录有更小的日期! (见我记录旁边的上述cmets)
【问题讨论】:
-
如何使用数据透视查询将数据放入同一行,然后将该查询用作子查询,然后您可以在其中进行数学运算。
-
您可以将心情开始时间和心情结束时间作为单独的列吗?如果是,那么您可以使用 TO_CHAR() 函数来查找差异。
-
你也可以在视图上放置索引(虽然它们有一些很大的限制)
-
不要使用触发器。为什么需要存储可以在查询时派生的冗余数据?如果你真的认为你需要存储它,为什么不添加增量作为插入新行的一部分(它所要做的就是为同一用户获取现有的 MAX([datetime]) )?
-
@Limey 你将如何构建一个索引视图来更快地回答这个查询?
标签: sql-server view calculated-columns