简体   繁体   English

检索最大日期

[英]Retrieve max date

I am trying to retrieve only the record with the max ELIGIBLE date.我正在尝试仅检索具有最大 ELIGIBLE 日期的记录。 I have two orders in a table with the same order number.我在一个表中有两个订单号相同的订单。 The difference in the orders is that the ELIGIBLE dates are different.订单的不同之处在于 ELIGIBLE 日期不同。 I only want to retrieve the record with the latest ELIGIBLE date.我只想检索具有最新 ELIGIBLE 日期的记录。

The order information in ord_order table. ord_order 表中的订单信息。

ORDER NUMBER    | APPOINTMENT TYPE | ELIGIBLE
----------------+------------------+----------
264000000000382 | 109000000000001  | 11-JAN-16  
264000000000382 | 109000000000005  | 06-NOV-19  

I expect to only pull the information with the ELIGIBLE date as 06-NOV-19.我希望只提取 ELIGIBLE 日期为 06-NOV-19 的信息。

select LOGON_ID, LAB_USER.NAME, C.NAME as BU, F.NAME as AREA,  ORD.position_lat, ord.position_long,  
CAST((FROM_TZ(CAST(D.OCCURRED_AT AS TIMESTAMP),'+00:00') AT TIME ZONE 'EST5EDT' ) AS DATE) OCCURRED, CND_EVENT_DEF.CORE_DESCRIPTION, E.PARAM_VALUE
,(CASE WHEN CND_EVENT_DEF.CORE_DESCRIPTION = 'AsnAssignmentOnSite_evt' THEN CAST((FROM_TZ(CAST(D.OCCURRED_AT AS TIMESTAMP),'+00:00') AT TIME ZONE 'EST5EDT' ) AS DATE) END ) Arrival
,(CASE WHEN CND_EVENT_DEF.CORE_DESCRIPTION = 'OrdActivityComplete_evt' THEN CAST((FROM_TZ(CAST(D.OCCURRED_AT AS TIMESTAMP),'+00:00') AT TIME ZONE 'EST5EDT' ) AS DATE) END) Completion
,(CASE WHEN CND_EVENT_DEF.CORE_DESCRIPTION = 'AsnAssignmentEnRoute_evt' THEN CAST((FROM_TZ(CAST(D.OCCURRED_AT AS TIMESTAMP),'+00:00') AT TIME ZONE 'EST5EDT' ) AS DATE) END) Enroute
from 
  (select * 
  from ELOG_EVENT 
    where trunc(FROM_TZ(CAST(OCCURRED_AT AS TIMESTAMP),'+00:00') at TIME ZONE 'EST5EDT') between trunc(FROM_TZ(CAST(sysdate AS TIMESTAMP),'+00:00') at TIME ZONE 'EST5EDT')-365 and trunc(FROM_TZ(CAST(sysdate AS TIMESTAMP),'+00:00') at TIME ZONE 'EST5EDT')-365+366
      and ODB_DELETED is NULL 
      and EVENT_TYPE != 526000000000157) D
  inner join (select FOR_USER, BUSINESS from LAB_USER_BUSINESS where ORDINAL = 0 and ODB_DELETED is NULL) B on (B.FOR_USER = D.FOR_USER)
  left join (select BUSINESS_ID, NAME from LAB_BUSINESS where NAME ='EFO') C on (C.BUSINESS_ID = B.BUSINESS)
  inner join (select EVENT, PARAM_VALUE, ENTITY_KEY from ELOG_PARAM) E on (E.EVENT = D.EVENT_ID)
  left join LAB_USER on (LAB_USER.USER_ID = D.FOR_USER)
  inner join (select position_lat, position_long, max(eligible), order_num, dispatch_area from ord_order group by position_lat, position_long, order_num, dispatch_area) ORD on (E.param_value=ord.order_num)
  inner join AREA_NODE F on (F.NODE_ID = ORD.DISPATCH_AREA)
inner join CND_EVENT_DEF on (CND_EVENT_DEF.EVENT_DEF_ID = D.EVENT_TYPE)
where 
  (E.ENTITY_KEY is NULL and E.PARAM_VALUE != '0') 
    or (E.ENTITY_KEY = ORD.DISPATCH_AREA and D.EVENT_TYPE not in (526000000000228,526000000000229))
    AND C.NAME IS NOT NULL
    group by LOGON_ID, LAB_USER.NAME, C.NAME, f.name, CND_EVENT_DEF.CORE_DESCRIPTION, E.PARAM_VALUE, occurred_at, ord.position_lat, ord.position_long

I expect to only pull the information with the ELIGIBLE date as 06-NOV-19.我希望只提取 ELIGIBLE 日期为 06-NOV-19 的信息。

According to your description you simply want to retrieve the row with the maximum eligible date.根据您的描述,您只想检索具有最大合格日期的行。 That is:那是:

select * from ord_order where eligible = (select max(eligible) from ord_order);

In your query:在您的查询中:

inner join
(
  select * from ord_order where eligible = (select max(eligible) from ord_order)
) ord on e.param_value = ord.order_num

With multiple orders:有多个订单:

inner join
(
  select * from ord_order where (order_num, eligible) = 
    (select order_num, max(eligible) from ord_order group by order_num)
) ord on e.param_value = ord.order_num

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM