我这里有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,date和cid信息,我希望cocode是唯一的。问题是我无法使用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,我们非常感谢任何解决方案。感谢。
答案 0 :(得分: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;
答案 1 :(得分: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
小提琴here。
PS:请注意“最新的jid”我根据你的例子理解它实际上按字母顺序排序。