SQL:是否可以按时间顺序将CASE附加到两个值上?

时间:2019-07-26 08:51:03

标签: sql sql-server

我有一个基于scanningdata(仓库)的数据集。我的目标是分析“运动”。例如BARCODE UNLOAD,此后,货件将收到ASSIGN LOCATION扫描。为此,我需要对SCAN_EVENT_TYPE + SCAN_LOCATION进行过滤。因此,没有计划从V-14到V-02的移动(=1 movement to many) but the movement from V-02 -> V-02是他们每天早晨在仓库中进行的一轮扫描,以检查地板上还有多少件物品(=不是多余的运动)< / p>

https://imgshare.io/image/test.nr6iO

问题我如何基于这两个值在此查询中查找,并使用scan_date作为流的检查。

对于我来说,要完全100%准确,我需要使用SCAN_DATE 例如:

FLOW for SHIPMENT A
UNLOAD BARCODE
ASSIGN LOCATION = V-14 08:00
ASSIGN LOCATION = V-02 08:15
ASSIGN LOCATION = V-20 08:30
ASSIGN LOCATION = V-02 08:45

在这种情况下,我想查看两个V-02扫描。因为现在V-20介于两者之间。

FLOW for SHIPMENT B
UNLOAD BARCODE
ASSIGN LOCATION = V-14 08:00
ASSIGN LOCATION = V-02 08:15
ASSIGN LOCATION = V-02 08:45

在此示例中,我只希望看到1个V-02扫描(1个扫描是从他们在仓库中进行的早晨的一轮扫描)

我尝试了内联选择,MIN,MAX值和更多东西。但是我找不到解决问题的办法

select 
scal.BARCODE
, scal.SCAN_EVENT_TYPE
, scal.SCAN_DATE
, scal.SCAN_LOCATION
, scal.SCAN_ZONE
, scal.DOCK
, scal.H_ID_ORDER
, scal.ID_GOODS
, scal.SOURCE
from dwh.S_ORD_SCAN_LOCATIONS scal
where scal.BARCODE in
(
select 
scal1.BARCODE
from dwh.S_ORD_SCAN_LOCATIONS scal1
where scal1.SCAN_EVENT_TYPE in ('ASSIGN LOCATION', 'BARCODE LOAD', 'BARCODE UNLOAD')
and year(scal1.scan_date) = 2018
group by scal1.BARCODE,  scal1.SCAN_EVENT_TYPE, scal1.ID_GOODS
having count(scal1.BARCODE) > 2)

order by 1,2,6

我只想查看收到两次以上扫描的条形码,这些扫描按条形码,scan_event_type和id_goods分组

预期结果   装运A的流程

UNLOAD BARCODE 
ASSIGN LOCATION = V-14 08:00
ASSIGN LOCATION = V-02 08:15
ASSIGN LOCATION = V-20 08:30
ASSIGN LOCATION = V-02 08:45

在这种情况下,我希望看到3个“动作”。从V-14到V-02,从V-02到V-20,从V-20到V-02

  FLOW for SHIPMENT B
    UNLOAD BARCODE
    ASSIGN LOCATION = V-14 08:00
    ASSIGN LOCATION = V-02 08:15
    ASSIGN LOCATION = V-02 08:45

我希望在这里看到1个结果。从V-14到V-02(第二个V-02被取消)

0 个答案:

没有答案