我有两张桌子,
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
但我失败了。有人可以帮忙吗?非常感谢!
答案 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
您可能需要更改源表名称,因为我不确定它们的名称。