【问题标题】:selecting a specific date from the data based on a comparison to a different row根据与不同行的比较从数据中选择特定日期
【发布时间】:2022-11-11 22:35:43
【问题描述】:

我有一个 PO 的以下数据行。在这种情况下,我需要选择物品进入检查的日期并将其与今天进行比较。图像中强调的日期。我知道这是我需要的日期,因为在按日期排序时,前一行在检查“Insp”中显示为零。这是零件进行检查的最近日期。任何人都可以编写一个 sql 来选择最近的日期进行检查并将其与今天进行比较以显示零件已经检查了多少天?

ID  PO  Line    Rec Insp    Rej Transaction_Date
7616    263309  1   0   48  0   9/23/21 7:47 AM
7931    263309  1   0   0   48  10/12/21 7:36 AM
**13643 263309  1   0   42  48  9/21/22 9:39 AM**
13818   263309  1   0   42  0   9/28/22 4:27 PM
13819   263309  1   0   42  48  9/28/22 4:27 PM
13953   263309  1   0   42  0   10/4/22 7:55 AM
13955   263309  1   0   42  42  10/4/22 8:03 AM
13956   263309  1   0   42  0   10/4/22 8:04 AM
14011   263309  1   0   42  0   10/4/22 12:31 PM
14012   263309  1   0   42  0   10/4/22 12:31 PM

我已经取消了最短日期,在大多数情况下是我需要的日期,但如果零件已移出并重新进行检查,则该日期不起作用。

【问题讨论】:

    标签: sql date window-functions


    【解决方案1】:

    我了解到您正在为每个采购订单寻找最新的检查条目,其中检查条目是紧跟在0Insp 的行之后的行。

    我们可以使用lag 来检索Insp 的“最后一个”值,并使用它来过滤检查条目;然后,row_number() 可用于过滤每个po 的最新行。

    select *
    from (
        select t.*,
            row_number() over(partition by po order by transaction_date desc) rn
        from (
            select t.*,
                lag(insp) over(partition by po order by transaction_date desc) lag_insp
            from mytable t
        ) t
        where lag_insp = 0
    ) t
    where rn = 1
    

    【讨论】:

    • 太感谢了。效果很好!
    猜你喜欢
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多