**id**

问题描述 投票:0回答:1

表名 表_一列 : (id, ref_id, 时间戳)

| **id** | **ref_id** |    **timestamp**       |                              
| 1      | 111        | 2020-04-27 02:59:45    |           
| 2      | 111        | 2020-04-28 02:59:45    |            
| 3      | 111        | 2020-04-26 02:59:45    |

我想实现像

DELETE 
FROM   (
           SELECT *,
                  ROW_NUMBER() OVER(PARTITION BY red_id ORDER BY TIMESTAMP DESC) AS rn
           FROM   table_one
       ). 
       s
WHERE  r.rn != 1; 

执行上述删除查询后的表table_one应该是这样的。

| **id** | **ref_id** |    **timestamp**                                               
| 2      | 111        | 2020-04-28 02:59:45    |  

我试图选择需要删除的行,但没有得到正确的行号。请看下面我的查询。

SET @row_number : = 0;   
SELECT *
FROM   (
           SELECT @row_number: = CASE 
                                      WHEN @ci = ref_id THEN @row_number + 1
                                      ELSE 1
                                 END  AS rn,
                  @ci: = ref_id          ref_id,
                  id,
                  TIMESTAMP
           FROM   table_one
           ORDER BY
                  TIMESTAMP              DESC 

先谢谢你

mysql sql mysql-5.7
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.