加入两个表日期并获取每个项目的最新日期

时间:2013-08-05 09:32:42

标签: join

我有两张桌子,

PART LOG-OUT


PART_ID   DRAWN_DATE   LOCATION
 C0001    07/29/2013     501
 C0002    07/29/2013     604
 C0003    08/01/2013     703
 C0004    08/01/2013     807
 C0005    08/02/2013     505
 C0006    08/02/2013     602
 C0007    08/02/2013     707
 C0008    08/03/2013     802
 C0009    08/03/2013     803

PART RETURN


PART_ID   RETURN_DATE   LOCATION
 C0001    09/04/2013     STORE
 C0002    09/05/2013     STORE
 C0004    09/10/2013     STORE
 C0007    09/12/2013     STORE
 C0008    09/13/2013     STORE

这是我想要的结果:


PART_ID   LATEST_DATE   LOCATION
 C0001    09/04/2013     STORE
 C0002    09/05/2013     STORE
 C0003    08/01/2013      703
 C0004    09/10/2013     STORE
 C0005    08/02/2013      505
 C0006    08/02/2013      602
 C0007    09/12/2013     STORE
 C0008    09/13/2013     STORE
 C0009    08/03/2013      803

但我失败了。有人可以帮忙吗?非常感谢!

2 个答案:

答案 0 :(得分:1)

好吧,以防万一你正在使用MySQL(实际上,它应该在MSSQL下运行!)然后你可以做类似下面的事情

SELECT pid,COALESCE(rdate,pdate) dat,COALESCE(rloc,ploc) lo FROM partlogout 
LEFT JOIN partreturn ON rid=pid AND rdate>pdate

点击此处查看一个小演示:SQLfiddle

修改 由于数据库显然在MS-Access下运行,因此命令应为

SELECT pid,NZ(rdate,pdate) dat,NZ(rloc,ploc) lo FROM partlogout 
LEFT JOIN partreturn ON rid=pid AND rdate>pdate

答案 1 :(得分:0)

我认为这应该有效:

SELECT 
  pl.PART_ID, 
  CASE WHEN ISNULL(RETURN_DATE,'1900-01-01') > DRAWN_DATE THEN RETURN_DATE ELSE DRAWN_DATE END AS 'Latest date',  
  CASE WHEN ISNULL(RETURN_DATE,'1900-01-01') > DRAWN_DATE THEN pr.LOCATION ELSE pl.LOCATION END AS 'Location'
FROM PART_LOGOUT pl 
LEFT JOIN PART_RETURN pr ON pl.PART_ID=pr.PART_ID
ORDER BY pl.PART_ID

您可能需要更改源表名称,因为我不确定它们的名称。