gpt4 book ai didi

sql - 使用 Sql 2005 CTE 可以吗?

转载 作者:行者123 更新时间:2023-12-02 02:32:59 25 4
gpt4 key购买 nike

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

有一个日历表(LINE_ID、CALENDAR_DATE、SCHEDULED_MINUTES)显示每条生产线当天安排的分钟数。

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

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 完成这样的事情,还是应该由游标处理。或者...我只是完全以错误的方式解决这个问题吗?

最佳答案

这样的东西行得通吗?

;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 递归部分而变差。

关于sql - 使用 Sql 2005 CTE 可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3007355/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com