SUM 前 5 个数字中的第二大和第三大数字

SUM second and third LARGEST numbers out of previous 5 numbers

我正在寻找更新(计算 SET 值)现有 table 的解决方案,其总和为前 5 个中第二大和第三大的数字。

ID   |  Price  |  Sum                                  |
     |         |  (2nd + 3rd largest of the previous 5)|
-------------------------------------------------------
1    |   6     |                                       |
2    |   1     |                                       |
3    |   8     |                                       |
4    |   3     |                                       |
5    |   5     |                                       |
6    |   9     |   should be 11                        |
7    |   1     |   should be 13                        |
8    |   6     |   should be 13                        |
9    |   6     |   should be 11                        |
10   |   9     |   should be 12                        |
11   |   2     |   should be 15                        |
12   |   4     |   should be 12                        |

在 EXCEL 中,可以通过以下方式实现:=LARGE(range,2)+LARGE(range,3) 其中 range 始终指向最后 5 个数字。

我知道 MYSQL 具有 GREATEST(value1,value2,...) 和 LEAST(value1,value2,...) 函数,但此函数仅 return GREATEST 或最小值。

如果我需要忽略第一个最大的数字,而只将第二和第三大的数字相加,我该如何完成这个挑战?

思路围绕着原理:

UPDATE table 
    SET SUM = 
         GREATEST(2nd max price) where ID between ID-5 AND ID-1
         + 
         GREATEST(3rd max price) where ID between ID-5 AND ID-1

你可以试试这个。希望这就是你想要的。

update yourtable,
(
    select id,sum(number) as sum from(
        select id,number,
        case id when @id then @rownum := @rownum+1 else @rownum := 1 and @id:= id end as r
        from(
            select t.id,t1.number
            from yourtable t
            join(
                select id,number from yourtable order by number desc
                ) t1 on t1.id between (t.id - 5) and (t.id - 1)
            where t.id > 5
            order by t.id asc, t1.number desc
        ) t2
        join (select @rownum:=0, @id:=0) as x
    )as t3 where r in(2,3) -- 2nd max + 3rd max.
    group by id
)tab
set yourtable.sum = tab.sum
where yourtable.id = tab.id

此查询 updateSUM 在您的 table 和 (2nd Greater + 3rd Greater) from 5 previous ID 上。但是如果你只想查看结果而不更新,只需删除 UPDATE 语句。

p.s :Number 在该查询上意味着 price 在您的 table.