【发布时间】:2014-12-08 18:20:17
【问题描述】:
不使用 MSSQL、DB2 或 Oracle。 没有 CTE。 没有 OVERLAP 谓词。 没有 INTERVAL 数据类型。 情况:对要修理的车辆工作不能开始,直到 为这项工作订购的所有零件都已收到。 在开始维修之前,可以多次订购零件。 我们需要提取车辆处于“部件暂停”状态的时间
所以对于标识为 id = 1 的车辆 零件在 4 个不同的场合被订购 (d1) 和收到 (d2)
ID d1 d2
1 8/1 8/8
1 8/2 8/6
1 8/12 8/14
1 8/3 8/10
8/1 8/8
d1 d2
|-------------------------------|
8/2 8/6 8/12 8/14
d1 d2 d1 d2
|---------------| |----------|
8/3 8/10
d1 d2
|---------------------|
8/1 8/14
|---------------------------------------------------------| = 13 days
8/10 8/12
|--------------------------------------| + |----------| = parts hold = 11 days
从上面可以看出,开始工作的等待时间(假设 8/1 为 车辆可用于工作的日期)为 13 天。 等待零件的实际时间是 11 天,这是数字 我们需要从数据中得出。 实际的日期时间数据将是我们从中提取小时数的时间戳, 为了简单起见,我们在此示例数据中使用了日期。 我们正在努力生成一个基于集合(不是 psm,不是 udf,不是光标)的解决方案。 TIA
【问题讨论】:
-
虽然辅助日历表上的左连接可能会有所帮助。
-
@Brian,这个问题有很大不同。 OP,你能添加一个视图来帮助查询吗?
-
如果您查看示例“绘图”,您可以尝试计算每个日期未交付订单数量的解决方案。 8/1-8/2 = 2、8/2-8/3 = 3、8/3-8/6 = 4 等等。当您到达 8/10-8/12 时,您有 0 个未完成的交付。用非零值计算日期并给出等待天数。
标签: sql intervals gaps-and-islands