Sql 选择按id排序的唯一行

Sql 选择按id排序的唯一行,sql,sql-server,Sql,Sql Server,我有两张桌子 表A +-----+---------+---------+ | pid | name | country | +-----+---------+---------+ | 1 | ABC | XXXXXXX | | 2 | EFG | YYYYYYY | | 3 | IJK | ZZZZZZZ | | 4 | LMN | AAAAAAA | | 5 | OPQ | BBBBBBB | | 6 | RST

我有两张桌子

表A

+-----+---------+---------+
| pid | name    | country |
+-----+---------+---------+
|  1  | ABC     | XXXXXXX |
|  2  | EFG     | YYYYYYY |
|  3  | IJK     | ZZZZZZZ |
|  4  | LMN     | AAAAAAA |
|  5  | OPQ     | BBBBBBB |
|  6  | RST     | CCCCCCC |
+-----+---------+---------+
表B

+-----+---------+
| id  | pid     |
+-----+---------+
|  5  |   5     | 
|  4  |   1     | 
|  3  |   2     | 
|  2  |   5     | 
|  1  |   2     |
+-----+---------+
我想要下面的输出

+-----+---------+---------+
| pid | name    | country |
+-----+---------+---------+
|  5  | OPQ     | BBBBBBB |
|  1  | ABC     | XXXXXXX |
|  2  | EFG     | YYYYYYY |
+-----+---------+---------+
也就是说,输出应获得表B id字段的最新条目,表A的数据应显示在表B的pid显示顺序上

SELECT DISTINCT A.PID, A.NAME, A.COUNTRY
FROM TABLE_A A
INNER JOIN TABLE_B B
ON A.PID = B.PID
ORDER BY A.PID

您不需要一个连接或来自B的字段

SELECT a.pi, a.name, a.country
FROM A AS a
WHERE EXISTS(SELECT b.id FROM B AS b WHERE b.pid = a.pid)

您需要将表连接在一起,并获取最新的值。这里有一种方法:

select a.pid, a.name, a.country
from a join
     b
     on a.pid = b.pid
where b.id = (select max(b2.id) from b b2 where b2.pid = b.pid);
您还可以使用行号:


请为示例数据共享该脚本。它将很容易提供和回答应该是ORDER BY ID吗?否@sniperd,因为它们没有从表_b返回任何行,因此不需要聚合和ORDER BY,尽管PID只是使其与预期结果相匹配,而不管文章的标题如何。如果他们想要表格b id,那么Gordon的答案将是最理想的。感谢各位如此快速的回复。实际上需要根据表格b pid上显示的数据进行排序。。。在发布问题后,我理解这种困惑。如果PID在表B中显示为5,1,2,5,2,则预期输出为表A中的5,1,2。更新question@scsimon你对戈多的回答是对的。它解决了订购问题,也解决了维护订单的问题。排序后的数据应按照B.id的顺序。嘿,这一个已经处理了我的更新问题。非常感谢@Gordonselect a.pid,a.name,a.country from a join B on a.pid=B.pid其中B.id=select maxb2.id from B b2其中b2.pid=B.pid order by B.id desc;
select top (1) with ties t1.*
from table1 t1 inner join
     table2 t2
     on t2.pid = t1.pid
order by row_number() over (partition by t2.pid order by t2.id desc);