DB2 SQL,查询当前时间戳和时间值以及某些值不存在时返回的行的最佳方法

问题描述 投票:0回答:1

我正在尝试编写一个查询,其中仅显示交货日期/时间之前 3 小时且尚未放入 LOADING 或 LOADED 状态代码的记录。如果 LOADING/LOADED 中有状态代码,则预计不会返回任何行。 我不确定我应该使用哪种方法。

表A

账单号码 呼叫名称 目的地名称 行程_编号 交付日期 状态代码
TS00197548 ABC A店 62886 2025/01/16 16:00 ASSGN
TS00197548 ABC A店 62886 2025/01/16 16:00 加载中
TS00197548 ABC A店 62886 2025/01/16 16:00 已加载

这是我的询问

SELECT  b.bill_number, b.detail_line_id, b.callname, b.destname, a.trip_number, b.deliver_by, a.status_code
FROM    odrstat a
LEFT JOIN tlorder b ON a.order_id=b.detail_line_id
WHERE a.trip_number = 62886 
AND NOT EXISTS (SELECT 1 
                FROM odrstat c 
                WHERE a.order_id=c.order_id AND a.status_code=c.status_code AND a.trip_number=c.trip_number AND a.zone_id=c.zone_id AND a.leg_id=c.leg_id AND c.status_code LIKE 'LOAD%')
AND HOUR(current timestamp)+3 = HOUR(b.deliver_by)
GROUP BY b.bill_number, b.detail_line_id, b.callname, b.destname, a.trip_number, 

输出如下。我试图得到一个没有返回任何内容的结果,因为状态代码 LOADING/LOADED 存在。下面的输出应该只显示 LOADING/LOADED 代码不存在并且距离交货时间 3 小时

账单号码 呼叫名称 目的地名称 行程_编号 交付日期 状态代码
TS00197548 ABC A店 62886 2025/01/16 16:00 ASSGN

感谢您的帮助和时间!

sql db2
1个回答
0
投票

我更改了时间过滤器和加载/加载过滤器,您可以尝试一下吗?

SELECT b.bill_number, 
       b.detail_line_id, 
       b.callname, 
       b.destname, 
       a.trip_number, 
       b.deliver_by, 
       a.status_code
FROM odrstat a
LEFT JOIN tlorder b 
  ON a.order_id = b.detail_line_id
WHERE a.trip_number = 62886 
  AND NOT EXISTS (
      SELECT 1 
      FROM odrstat c
      WHERE c.order_id = a.order_id 
        AND c.status_code IN ('LOADING', 'LOADED')
  )
  AND b.deliver_by >= CURRENT_TIMESTAMP + INTERVAL 3 HOUR
  AND b.deliver_by < CURRENT_TIMESTAMP + INTERVAL 4 HOUR
GROUP BY b.bill_number, 
         b.detail_line_id, 
         b.callname, 
         b.destname, 
         a.trip_number, 
         b.deliver_by, 
         a.status_code;
© www.soinside.com 2019 - 2024. All rights reserved.