Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/testing/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Db2 比较两个表时如何获取最近日期的数据_Db2 - Fatal编程技术网

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

Db2 比较两个表时如何获取最近日期的数据,db2,Db2,我有两个表需要在最接近的日期(最接近的日期之前)合并。 例如:在表1中,日期为2018年6月19日(年月日),那么我想从表2中获取最近的日期之前的数据(如果表中有2018年7月19日、2018年6月20日和2018年6月16日,我想获取2018年6月16日的记录信息)。 我在表1中有多条记录,希望从表2中获得表单中最近的日期记录。有关我的要求的更多信息,请参见图片。提前感谢您的帮助。假设您必须为每个客户明确地执行此操作(customer列是示例中的一个键)。如果您有另一个键(例如custome

我有两个表需要在最接近的日期(最接近的日期之前)合并。

例如:在表1中,日期为2018年6月19日(年月日),那么我想从表2中获取最近的日期之前的数据(如果表中有2018年7月19日、2018年6月20日和2018年6月16日,我想获取2018年6月16日的记录信息)。
我在表1中有多条记录,希望从表2中获得表单中最近的日期记录。有关我的要求的更多信息,请参见图片。提前感谢您的帮助。

假设您必须为每个客户明确地执行此操作(
customer
列是示例中的一个键)。如果您有另一个键(例如
customer,item_name
item_name
列未显示,在本例中手动添加它),然后更改相应的谓词(在示例中为
a[2]。customer=x.customer和a[2]。item_name=x.item_name
)。如果不想为每个客户执行此操作,只需删除谓词
a[2].customer=x.customer和

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

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;