【问题标题】: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 应该向我展示这一点。 ;-)

标签: join


【解决方案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()
  • 我已经用谷歌搜索了错误,但要求获得替代方案而不是提供解决方案。下次我会在 Stackoverflow 上搜索。感谢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.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-13
  • 1970-01-01
  • 1970-01-01
  • 2018-04-16
  • 2019-12-26
  • 1970-01-01
  • 2021-12-04
相关资源
最近更新 更多