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

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.

以上是关于加入两个表日期并获取每个项目的最新日期[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在yii中获取每个用户的最新日期记录

我如何查询给定日期范围的mysql并加入两个表?

加入两个表,只显示唯一值和最大日期

获取每个产品最新的两条线并获取价格和日期

检查文件系统上文件的修改日期并获取最新文件

每个项目 mongodb 组的最新记录(按日期)