加入两个表日期并获取每个项目的最新日期[关闭]
Posted
技术标签:
【中文标题】加入两个表日期并获取每个项目的最新日期[关闭]【英文标题】:join two tables date and get latest date on every item [closed] 【发布时间】:2013-08-05 09:32:41 【问题描述】:我有两张桌子,
部分退出
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_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
但我失败了。有人可以帮忙吗?非常感谢!
【问题讨论】:
您使用的是什么 DBMS? 其实:C0002
又回到了商店,返回日期(09/05/2013)在注销日期之后。我的running example 应该向我展示这一点。 ;-)
【参考方案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
【讨论】:
感谢您的快速回复。我一会儿试试。 我在 MS Access 2010 Query 中执行 SQL 时收到此错误“表达式中未定义的函数 'COALESCE'”。我可以知道我该怎么做吗? 你应该谷歌它然后你会想出this, an older SO-Post --> 使用NZ()
我已经用谷歌搜索了错误,但要求获得替代方案而不是提供解决方案。下次我会在 *** 上搜索。感谢cars10的一百万,不仅在发布之前测试了答案,而且帮助我解决了我已经挣扎了一个多星期的问题。非常感谢!【参考方案2】:
我认为这应该可行:
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
您可能必须更改源表名称,因为我不确定它们是如何命名的。
【讨论】:
对不起,JPW。我只是想在 RESULT 之后编辑 C0002 的 LOCATION 并再次破坏表。你能帮我把它弄回来吗?或者你可以告诉我怎么做。谢谢! @user2652375 对不起,我不明白你想要什么。 格式化表格又回来了。谢谢!汽车10.以上是关于加入两个表日期并获取每个项目的最新日期[关闭]的主要内容,如果未能解决你的问题,请参考以下文章