首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Sql 2005 CTE可以做到这一点吗?

使用Sql 2005 CTE可以做到这一点吗?
EN

Stack Overflow用户
提问于 2010-06-09 23:35:57
回答 2查看 165关注 0票数 3

我一直在进行一个查询,该查询将根据到期日和完成任务所需的分钟数返回生产线的建议开始日期。

有一个日程表(LINE_ID、CALENDAR_DATE、SCHEDULED_MINUTES),显示每条生产线当天计划的分钟数。

示例:(通常每天安排3个班次,没有周末,但可能会有所不同)

代码语言:javascript
复制
1, 06/8/2010 00:00:00.000, 1440
1, 06/7/2010 00:00:00.000, 1440
1, 06/6/2010 00:00:00.000, 0
1, 06/5/2010 00:00:00.000, 0
1, 06/4/2010 00:00:00.000, 1440

为了得到建议的开始日期,我需要从截止日期开始,然后向下迭代,直到我积累了足够的时间来完成任务。

我的问题是这样的事情可以用CTE来完成吗,还是应该由游标来处理。或者..。我是不是完全走错了路?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-06-16 19:34:05

像这样的东西可以工作吗?

代码语言:javascript
复制
;WITH CALENDAR_WITH_INDEX(CALENDAR_DATE, AVAILABLE_MINUTES, DATE_INDEX)
(
     SELECT
          CALENDAR_DATE,
          1440 - SCHEDULED_MINUTES,               /* convert scheduled minutes to available minutes */
          ROW_NUMBER() OVER (ORDER BY CALENDAR_DATE DESC) /* get day indexes. can't use DATE functions to get previous day (think holidays) */
     FROM
          CALENDAR
     WHERE
          LINE_ID = @LINE_ID AND
          CALENDAR_DATE < @DUEDATE                        /* use <= instead of < if you can do stuff on the scheduled date too */
),
WITH TIME_SLICES (SCHEDULED_DATE, MINUTESPENDING, SLICE_INDEX)
(
     SELECT 
          CALENDAR_DATE, 
          @DURATION - (AVAILABLE_MINUTES),                /* knocks of minutes available from our running total */
          DATE_INDEX
     FROM 
          CALENDAR_WITH_INDEX                             
     WHERE
          DATE_INDEX = 1                                  /* gets the first date usable date */

     UNION ALL

     SELECT 
          CALENDAR_DATE, 
          MINUTESPENDING - AVAILABLE_MINUTES
          DATE_INDEX
     FROM 
          CALENDAR_WITH_INDEX
          INNER JOIN TIME_SLICES 
               ON DATE_INDEX = SLICE_INDEX + 1            /* this gets us the date 1 day before */
     WHERE
          MINUTESPENDING > 0                              /* stop when we have no more minutes */
)
SELECT MIN(SCHEDULED_DATE) FROM TIME_SLICES

我猜性能会很差,因为row_number,递归部分。

票数 1
EN

Stack Overflow用户

发布于 2010-06-14 17:51:15

使用公用表表达式计算运行总数是可能的,但速度很慢。这是少数几种游标性能更好的情况之一。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3007355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档