【问题标题】:Get latest release records using sql query使用sql查询获取最新发布记录
【发布时间】: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

【问题讨论】:

    标签: sql max distinct-values


    【解决方案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

      【解决方案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

      上的演示

      【讨论】:

        猜你喜欢
        • 2016-10-15
        • 2020-07-21
        • 2021-01-10
        • 2011-10-26
        • 1970-01-01
        • 2014-01-12
        • 1970-01-01
        • 2014-12-23
        • 1970-01-01
        相关资源
        最近更新 更多