【问题标题】:SQL query to get the data not including latest versionsSQL查询以获取不包括最新版本的数据
【发布时间】:2015-07-23 10:56:12
【问题描述】:

我在 SQL Server 2012 中工作。我有一个包含以下 2 列的表

table, th, td {
    border: 1px solid black;
     border-collapse: collapse;
}
th, td {
    padding: 15px;
}
<table style="width:100%">
   <tr>
    <th>ID</th>
     <th>Version</th> 
   </tr>
  <tr>
    <td>1</td>
     <td>0</td> 
   </tr>
   <tr>
    <td>1</td>
     <td>1</td> 
   </tr>
   <tr>
    <td>1</td>
     <td>2</td> 
   </tr>
   <tr>
    <td>1</td>
     <td>3</td> 
   </tr> 
  <tr>
    <td>2</td>
     <td>0</td> 
   </tr>
   <tr>
    <td>2</td>
     <td>1</td> 
   </tr>
   <tr>
    <td>2</td>
     <td>2</td> 
   </tr>
   <tr>
    <td>3</td>
     <td>0</td> 
   </tr>
   <tr>
    <td>3</td>
     <td>1</td> 
   </tr>
</table>

我只想获取超过 2 个版本的 id,而不包括最新的 2 个版本(意味着 ID 1 有 4 个版本,我只需要提取最新的 2 个版本(3,2))。

table, th, td {
    border: 1px solid black;
     border-collapse: collapse;
}
th, td {
    padding: 15px;
}
<table style="width:100%">
   <tr>
    <th>Id</th>
     <th>Version</th> 
   </tr>
  <tr>
    <td>1</td>
     <td>0</td> 
   </tr>
  <tr><td>1</td>
  <td>1</td></tr>
  <tr><td>2</td>
  <td>0</td></tr>
</table> 

如何编写查询?我已经尝试过以下查询 select * from bitest where version not in ( 从最咬的版本中选择版本( SELECT Max(版本)
FROM 比特斯特
按 ID 分组
拥有最大(版本)>= 2
)) 并在 ( 从 bitest where version in( SELECT Max(版本)
FROM 比特斯特
按 ID 分组
拥有最大(版本)>= 2
)) 请更正查询以获得所需的结果

【问题讨论】:

  • 我试过下面的查询,

标签: sql-server sql-server-2012


【解决方案1】:

要仅获取具有 2 个以上版本的 id,请尝试以下操作:

SELECT id,COUNT(version) FROM tt GROUP BY id HAVING COUNT(version)>2

【讨论】:

  • 谢谢您..请您帮忙获取最新 2 个版本之前的版本
  • 你能解释一下你想要什么吗?
  • 我使用 Rank() 得到了查询
【解决方案2】:
DECLARE @DataSource TABLE
(
    [ID] TINYINT
   ,[Version] TINYINT
);

INSERT INTO @DataSource ([ID], [Version])
VALUES (1,0)
      ,(1,1)
      ,(1,2)
      ,(1,3)
      ,(2,0)
      ,(2,1)
      ,(2,2)
      ,(3,0)
      ,(3,1);

SELECT [ID]
      ,MIN([Version]) AS [Version]
FROM @DataSource
GROUP BY [ID]
HAVING COUNT([Version]) > 2;

【讨论】:

    【解决方案3】:

    如果我理解正确,您正在寻找这个:-

    Set Nocount On;
    
    Declare @test Table
    (
         Id             Int
        ,Version        Int
    )
    
    Insert Into @test(Id,Version) Values
     (1,0) 
    ,(1,1) 
    ,(1,2) 
    ,(1,3) 
    ,(2,0) 
    ,(2,1) 
    ,(2,2) 
    ,(3,0) 
    ,(3,1) 
    
    
    Select  *
    From    @test As t
    Where   t.Version Not In (  Select  Top 2
                                        t.Version
                                From    @test As t
                                Order By t.Version Desc
                             )
    
    ---- Ids which having more than 2 versions BUT NOT latest 2 Versions.
    Select   t.Id
    From    @test As t
    Where   t.Version Not In (  Select  Top 2
                                        t.Version
                                From    @test As t
                                Order By t.Version Desc
                             )
    Group By t.Id
    Having Count(t.Version) > 2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多