比较两个表时如何获取最近日期的数据

时间:2018-12-20 20:08:31

标签: db2

我有两个表需要在最近的日期(日期之前最近)连接。 Screenshot of My Requirement

例如:在Table1中,日期为6/19/2018(M / DD / YYYY),那么我想从Table2中获取最近日期的数据(如果表具有2018年7月19日,06/20 / 2018和06/16/2018,我想获取06/16/2018记录信息)。 我在table1中有多个记录,并且想要从table2中获取最近的日期记录。请参阅图片以获取有关我的要求的更多信息。预先感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

假设您必须为每个客户明确地做到这一点(customer列是示例中的关键)。如果您有另一个键(假设customer, item_nameitem_name列未显示,在这种情况下请手动添加),然后更改相应的谓词(在示例中为a[2].customer=x.customer and a[2].item_name=x.item_name)。如果您不想为每个客户都这样做,只需删除谓词a[2].customer=x.customer and

您可以按原样运行以下语句进行检查。

with 
  xyz (customer, req_del_date) as (values
  ('ABC', date('2018-06-19'))
, ('ABC', date('2018-09-04'))
, ('ABC', date('2018-04-24'))
, ('ABC', date('2018-03-17'))
)
, abc (customer, actual_del_date) as (values
  ('ABC', date('2018-11-20'))
, ('ABC', date('2018-06-12'))
, ('ABC', date('2018-05-09'))
, ('ABC', date('2018-04-27'))
, ('ABC', date('2018-04-14'))
, ('ABC', date('2017-12-31'))
, ('ABC', date('2017-12-30'))
)
select x.customer, x.req_del_date, a.actual_del_date, a.diff_days
from xyz x, table (
select a.customer, a.actual_del_date
, days(x.req_del_date) - days(actual_del_date) diff_days -- just for test
-- other columns from abc if needed
from abc a
where a.customer=x.customer and x.req_del_date>=a.actual_del_date
and (days(x.req_del_date) - days(a.actual_del_date)) = 
(
select min(days(x.req_del_date) - days(a2.actual_del_date))
from abc a2
where a2.customer=x.customer and x.req_del_date>=a2.actual_del_date
)
) a;