-1

我这里有 2 张桌子

表 r

    id        |add       |jid  |sid|cocode
    ------------------------------------------
    0234567890|PO BOX 456|p123a|2  |TRAVEL2000
    0234567890|PO BOX 789|q456b|4  |TRAVEL2000
    0234567890|PO BOX 123|r789c|1  |TRAVEL2000

表o

    jid  |pkey      |tid|date      |cid
    ---------------------------------
    q334a|0234567890|1  |15/08/2013|200

我想创建一个新表,其中包含表 o 和表 r 的合并,目的是通过使用 id = pkey 获取 tid、日期和 cid 信息,并且我希望代码是唯一的。问题是我无法使用 jid 进行匹配以选择哪个记录作为输出,因为它们可能与我上面显示的示例不同。所以我想通过使用升序来获取最新的 jid(在本例中为 r789c)。我的预期结果表将是:

    id        |add       |jid  |sid|cocode    |tid|date      |cid
    -------------------------------------------------------------
    0234567890|PO BOX 123|r789c|1  |TRAVEL2000|1  |15/08/2013|200

我正在使用 SQL Server 2008,任何解决方案都将不胜感激。谢谢。

4

2 回答 2

1

听起来您想将来自r(基于 jid)的最后一条记录与来自o. 如果是这样,那么以下查询将执行您想要的操作:

select r.id, r.add, r.jid, r.sid, r.cocode, o.tid, o.date, o.cid
from (select r.*, row_number() over (partition by id order by jid desc) as seqnum
      from r
     ) r join
     o
     on r.id = o.pkey and seqnum = 1;
于 2013-08-28T00:52:11.137 回答
0

首先,创建相应的表来保存该数据。然后,将此查询的结果插入其中:

SELECT r1.*, o1.tid, o1.date, o1.cid FROM r r1
LEFT JOIN r r2 ON r1.id = r2.id AND r1.jid < r2.jid
JOIN o o1 ON r1.id = o1.pkey
WHERE r2.jid IS NULL

在这里拉小提琴。

PS:请注意,根据您的示例,我理解“最新的 jid”实际上是按字母顺序排列的。

于 2013-08-28T00:58:38.337 回答