首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >选择将来的日期

选择将来的日期
EN

Stack Overflow用户
提问于 2011-10-28 00:47:53
回答 1查看 116关注 0票数 1

我正在编写发货交付报告,以确定发货是否在发货窗口内完成。

每个版本都有一个Ship_Date值,该值是该版本必须发布的日期。然而,一些版本有一个延迟窗口整数值,表示如果发货是在X天内完成的,那么它仍然被认为是准时的。

另一个表使这一点变得复杂,该表保存了当月的有效船舶日期(用于排除节假日、周末等)。

代码语言:javascript
运行
复制
Order_Releases_Table
  Part_No,
  Quantity,
  Ship_Date,
  Window

Shipping_Date
  Shipping_Day

样本数据

代码语言:javascript
运行
复制
Order_Releases_Table
Part_No  Quantity  Ship_Date  Window
ABC      100       9/1/2011   0
XYZ      200       9/1/2011   2

Shipping_Date
9/1/2011
9/2/2011
9/5/2011

因此,有了这个数据部分,ABC必须在9/1发货才能被认为是准时的。Part XYZ虽然可以在9/1之后2天发货,但仍然可以被认为是按时发货,但由于9/3不在我们的发货天数内,那么9/5是它可以发货的最后一天,并且仍然可以被认为是按时发货。

我认为答案在于联接shipping days表的一个子查询,该查询为shipping_day字段分配一个行号。

代码语言:javascript
运行
复制
SELECT
  Row_Number() OVER(ORDER BY Shipping_Date) AS Day_No,
  Shipping_day
FROM Shipping_Date
WHERE Shipping_Day > Ship_Date

RETURNS
Day_No  Shipping_Day
1       9/2/2011
2       9/5/2011

然后,如果我简单地选择此子查询的Day_No等于发布的窗口值的日期,那么我就有了特定发货可以发货的最后一天,并且仍然被视为按时发货。

不过,我很难将所有这些都封装到最终的查询中。

这是解决问题的正确方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-28 01:08:20

也许这会让你开始:

代码语言:javascript
运行
复制
DECLARE @t TABLE (Part CHAR(3), ShipDate DATETIME, Window INT)
DECLARE @ship TABLE (ShipDate DATETIME)

INSERT INTO @t
        ( Part, ShipDate, Window )
SELECT 'abc', '20110901', 0
UNION
SELECT 'xyz', '20110901', 2


INSERT INTO @ship
        ( ShipDate )
SELECT   '20110901'  
UNION
SELECT '20110905'
UNION
SELECT '20110910'


SELECT Part, ShipDate, Window,
    (SELECT MIN(ShipDate) AS NextShip
      FROM @ship S 
      WHERE s.shipDate >= DATEADD(day, t.Window, t.shipDate))
FROM @t t
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7919422

复制
相关文章

相似问题

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