我有一个PO的以下数据行。在这种情况下,我需要选择项目进入检查的日期,并将其与今天进行比较。强调的日期来自图像。我知道这是我需要的日期,因为按日期排序时,前一行在inspection '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
我已经拉出了最小日期,在大多数情况下,这是我需要的日期,但如果零件已经移出并返回检查,则不起作用。
我理解您正在寻找每个PO的最新检验条目,其中检验条目是紧跟Insp
中0
的行。
我们可以使用lag
来检索&;last&;;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