如何获得所有第二高值的行

tfcsantana

我有这张桌子:

name  value  year
 A      1    2015
 A      2    2014
 A      3    2013
 B      1    2015
 B      3    2013
 C      1    2015
 C      2    2014

如何为每个名称获得年份第二高的行,如下所示:

name  value  year
 A      2    2014
 B      3    2013
 C      2    2014

我尝试了以下查询,但没有成功:

select name, value, year
from TABLE_NAME
WHERE year IN (select year from TABLE_NAME order by year desc limit 1,1)

上一个查询给了我这个错误:“ SQL错误(1235):此版本的MySQL尚不支持'LIMIT&IN / ALL / ANY / SOME子查询'”

而且我现在无法更改MySQL版本(5.6.25),因为该解决方案已经投入生产。

有什么帮助吗?

康拉德·弗里克斯(Conrad Frix)

在MySQL中,每个组求解n的一种方法是模拟ROW_NUMBER。请注意,这只会为每个名称返回一个值。

SELECT 
    name, 
    value,
    year
FROM 
    (SELECT 
        t.name, 
        t.value,
        t.year,
        @rn := if(@prev = t.name, @rn + 1,1) as rn,
        @prev:=t.name

    FROM
        test_table as t
        JOIN (SELECT @Prev:= Null, @Rn := 0) as v
    ORDER BY 
        t.name,
        T.year desc) as t
WHERE
    rn = 2;

这是如何工作的。

  • SELECT @Prev:= Null, @Rn := 0 初始化两个变量@Prev和@Rn。
  • @rn := if(@prev = t.name, @rn + 1,1) as rn 将@rn的变量设置为1或@rn + 1,具体取决于@prev = t.Name并返回@rn的值作为列rn
  • @prev:=t.name 将@prev的值设置为等于name的当前值

如果你跑

SELECT 
    t.name, 
    t.value,
    t.year,
    @prev = t.name as eval,
    @rn := if(@prev = t.name, @rn + 1,1) as rn,
    @prev:=t.name as prev

FROM
    test_table as t
    JOIN (SELECT @Prev:= Null, @Rn := 0) as v
ORDER BY 
    t.name,
    T.year desc

我希望有类似的东西

name  value  year  eval  rn  prev
 A      1    2015  false  1  null
 A      2    2014  true   2  A
 A      3    2013  true   3  A
 B      1    2015  false  1  A
 B      3    2013  true   2  B
 C      1    2015  false  1  B
 C      2    2014  true   2  C

包装到子查询中,并进行过滤,即可rn=2获得所需的结果

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MATLAB。当第二列的行具有相同的值时,如何对第一列的所有行求和?

来自分类Dev

Dask 数据框获得第二高的值和列名

来自分类Dev

如何在具有多个状态的集合中获得mongodb中的第二高状态

来自分类Dev

如何使用Oracle查询行A列的值作为第二行B列的输入并循环所有关系记录

来自分类Dev

将所有列除以第二列中的值-适用于所有行

来自分类Dev

将所有列除以第二列中的值-适用于所有行

来自分类Dev

我怎样才能为所有用户获得第二行

来自分类Dev

如何在mysql中获得薪水第二高的员工

来自分类Dev

如何从数据库获得第二高的薪水

来自分类Dev

了解获得数组中第二低和第二高的值

来自分类Dev

MYSQL查找第二行具有给定值的所有行

来自分类Dev

如何获得第二高工资的所有员工记录基础

来自分类Dev

从mysql表中获取所有第二高的数据

来自分类Dev

从mysql表中获取所有第二高的数据

来自分类Dev

从第二高的工资中提取所有工资

来自分类Dev

找到第二高的值

来自分类Dev

mysql选择满足第一和第二最低值的所有行?

来自分类Dev

如何仅显示出现次数第二高的值?

来自分类Dev

合并第二列中的所有数据,以获得第一列中的每个唯一值

来自分类Dev

在Oracle上获得每个值的第二高最大值

来自分类Dev

如何获得第二个标签值

来自分类Dev

如何仅映射数组中的所有第二个值

来自分类Dev

从表的第二行中选择所有行?

来自分类Dev

如何获得R中每一行中出现次数第二多的值(和出现次数最少的值)

来自分类Dev

如何在PostgreSQL中获得第二行?

来自分类Dev

如何使表格中的第二行占用所有单元格的空间?

来自分类Dev

Python Pandas-数据框通过pd.groupby()。agg()获得第二高的值

来自分类Dev

如何从“员工”表中获得第一高,第二高或第三高的薪水

来自分类Dev

如何从“员工”表中获得第一高,第二高或第三高的薪水

Related 相关文章

  1. 1

    MATLAB。当第二列的行具有相同的值时,如何对第一列的所有行求和?

  2. 2

    Dask 数据框获得第二高的值和列名

  3. 3

    如何在具有多个状态的集合中获得mongodb中的第二高状态

  4. 4

    如何使用Oracle查询行A列的值作为第二行B列的输入并循环所有关系记录

  5. 5

    将所有列除以第二列中的值-适用于所有行

  6. 6

    将所有列除以第二列中的值-适用于所有行

  7. 7

    我怎样才能为所有用户获得第二行

  8. 8

    如何在mysql中获得薪水第二高的员工

  9. 9

    如何从数据库获得第二高的薪水

  10. 10

    了解获得数组中第二低和第二高的值

  11. 11

    MYSQL查找第二行具有给定值的所有行

  12. 12

    如何获得第二高工资的所有员工记录基础

  13. 13

    从mysql表中获取所有第二高的数据

  14. 14

    从mysql表中获取所有第二高的数据

  15. 15

    从第二高的工资中提取所有工资

  16. 16

    找到第二高的值

  17. 17

    mysql选择满足第一和第二最低值的所有行?

  18. 18

    如何仅显示出现次数第二高的值?

  19. 19

    合并第二列中的所有数据,以获得第一列中的每个唯一值

  20. 20

    在Oracle上获得每个值的第二高最大值

  21. 21

    如何获得第二个标签值

  22. 22

    如何仅映射数组中的所有第二个值

  23. 23

    从表的第二行中选择所有行?

  24. 24

    如何获得R中每一行中出现次数第二多的值(和出现次数最少的值)

  25. 25

    如何在PostgreSQL中获得第二行?

  26. 26

    如何使表格中的第二行占用所有单元格的空间?

  27. 27

    Python Pandas-数据框通过pd.groupby()。agg()获得第二高的值

  28. 28

    如何从“员工”表中获得第一高,第二高或第三高的薪水

  29. 29

    如何从“员工”表中获得第一高,第二高或第三高的薪水

热门标签

归档