Sql 选择按id排序的唯一行
我有两张桌子 表ASql 选择按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
+-----+---------+---------+
| 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);