使用sql查询获取最新发布记录

Posted

技术标签:

【中文标题】使用sql查询获取最新发布记录【英文标题】:Get latest release records using sql query 【发布时间】:2022-01-06 00:56:41 【问题描述】:
create table demo
(
    sno int primary key identity(1,1),
    cid int, 
    docno nvarchar(100),
    revisionid varchar(10) ,
    status nvarchar(100)
)

insert into demo 
values (1, 'abc', '00', 'release'),
       (2, 'abc', '01', 'release'),
       (3, 'abc', '02', 'notrelease'), 
       (4, 'xyz', '00', 'notrelease'),
       (5, 'xyz', '01', 'release'), 
       (6, 'xyz', '02', 'release'),
       (7, 'pqr', '01', 'release')

从下表中我想获取 cid 以获取所有 docno 的最新发布状态

例如:对于 abc ->cid=2,对于 xyz->cid=6,对于 abc ->pqr=7

sno cid Docno Revisionid status
1 1 abc 00 release
2 2 abc 01 release
3 3 abc 02 notrelease
4 4 xyz 00 notrelease
5 5 xyz 01 release
6 6 xyz 02 release
7 7 pqr 00 release

【问题讨论】:

【参考方案1】:

您可以使用以下查询来获得所需的输出:

 select docno,max(cid) from Demo where status = 'release'
 group by docno;

【讨论】:

【参考方案2】:

使用子查询试试这个:

SELECT DISTINCT demo.docno, demo.cid
FROM demo
INNER JOIN 
(
  SELECT docno, max(Revisionid) as max_rev
  FROM demo
  WHERE status = 'release'
  GROUP BY docno
) as sq
ON demo.docno=sq.docno 
AND demo.Revisionid = sq.max_rev

db<>fiddle

【讨论】:

Bad habits to kick : using table aliases like (a, b, c) or (t1, t2, t3)【参考方案3】:

在 Sql Server 中,您可以将TOP n WITH TIESROW_NUMBER 结合使用。

方便获取每个 docno 的最新发布的 cid。

select top 1 with ties docno, cid
from demo
where status = 'release'
order by 
   row_number()
   over (partition by docno 
         order by cid desc, sno desc)
docno cid
abc 2
pqr 7
xyz 6

dbfiddle here

上的演示

【讨论】:

以上是关于使用sql查询获取最新发布记录的主要内容,如果未能解决你的问题,请参考以下文章

SQL 查询以获取该用户的最新记录

SQL - 使用 GROUP BY 获取子查询子集中或连接中的最新记录

如何查询 sql 以获取最新的记录日期,但如果记录有消息返回该 reocrd [关闭]

SQL 查询根据日期获取最新的 3 次发送,然后对记录进行分组

Sql 查询以获取最多 10 条的最新记录并按提到行排名的字段排序 [关闭]

SQL查询最新记录[重复]