使用GROUP BY后查找具有MAX值的行

尼基斯氏族

我有4个列的表:dept_no, emp_no, from_date, to_date,其中每个dept_noemp_no是经理。

我想找到当前使用的经理to_date,并且要显示dept_noemp_no

样本数据:

|emp_no  |dept_no  | from_date  |   to_date  |
| 11     | d001    | 1985-01-01 | 1991-10-01 |
| 12     | d001    | 1991-10-01 | 9999-01-01 |
| 21     | d002    | 1985-01-01 | 1989-12-17 |
| 22     | d002    | 1989-12-17 | 9999-01-01 |
| 31     | d003    | 1985-01-01 | 1992-03-21 |
| 32     | d003    | 1992-03-21 | 9999-01-01 |

样本输出:

|emp_no   |dept_no  |
|12       |d001     |
|22       |d002     |
|32       |d003     |

我发现了这一点:

SELECT dept_no
     , emp_no 
  FROM 
     ( SELECT dept_no
            , MAX(to_date) as cur 
         FROM dept_manager 
        GROUP 
           BY dept_no) as new 
  JOIN dept_manager using(dept_no) 
 where cur = to_date;

我找到MAX(to_date)每个部门的,然后在WHERE子句中使用它

这可行,但我认为应该有更好的方法来做到这一点。

我已经看到了许多类似的问题,但是没有一个问题对我有所帮助,因为我想显示不能在分组依据中使用的列。

专线小巴

一种可移植且通常有效的方法是使用子查询进行过滤:

select dept_no, emp_no
from dept_manager d
where to_date = (select max(d1.to_date) from dept_manager d1 where d1.dept_no = d.dept_no)

为了提高此查询的性能,您需要在上建立索引(dept_no, to_date)

另一个常用方法是窗口函数:

select *
from (
    select d.*, row_number() over(partition by dept_no order by to_date desc) rn
    from dept_manager d
) d
where rn = 1

根据您的数据库和版本,可能会有更整洁的选择。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用plyr-R进行分块后,从一列中获取具有最高值的行

来自分类Dev

使用具有NaN值的索引矩阵查找矩阵的行元素

来自分类Dev

使用GROUP BY跳过条目的MySQL MAX值

来自分类Dev

使用SQL Group by并具有

来自分类Dev

使用lodash查找具有真实值的JS对象的属性

来自分类Dev

如何使用PostgreSQL在任何列中查找具有NULL值的所有行

来自分类Dev

使用MAX DATE和GROUP BY提取行

来自分类Dev

从每个GROUP BY(unique_id)和ORDER BY编号中选择具有MAX ID的SELECT行

来自分类Dev

使用GROUP BY条件查找丢失的序列值

来自分类Dev

使用dplyr查找具有相同值的下2行并将行粘贴到原始条目后面的新列中

来自分类Dev

使用group by在SQL中查找具有列的特定值的列的总和

来自分类Dev

使用SQL窗口函数填充1列具有值0的行,可能具有行索引的下一个max / prev min值

来自分类Dev

Ruby使用max_by在多维数组中查找具有最大值的元素

来自分类Dev

SQL使用GROUP BY查找最多最近的行

来自分类Dev

使用GROUP BY跳过条目的MySQL MAX值

来自分类Dev

如何使用Python Win32com在Excel中查找最后一行是否具有特定列的值

来自分类Dev

使用Linq在group子句中获取多个MAX值

来自分类Dev

如何使用Unix命令为特定列查找具有相同值的文件中的行?

来自分类Dev

在具有值数组的行上使用group_concat

来自分类Dev

在R中使用具有连续值的查找表

来自分类Dev

使用datediff查找行之间具有给定间隔的最小值

来自分类Dev

使用imhist函数后如何查找具有指定值的垃圾箱?

来自分类Dev

Mysql 使用 max(count/ group by) 使用 join

来自分类Dev

使用 group by 更新列值

来自分类Dev

使用 SQL 查找具有特殊字符的值的列

来自分类Dev

如何使用 GROUP BY 获得 MAX 行?

来自分类Dev

使用 GROUP BY 对行中列的值求和

来自分类Dev

使用 Group By Not Working 存储值?

来自分类Dev

使用 jquery 输入后查找具有特定类的跨度

Related 相关文章

  1. 1

    使用plyr-R进行分块后,从一列中获取具有最高值的行

  2. 2

    使用具有NaN值的索引矩阵查找矩阵的行元素

  3. 3

    使用GROUP BY跳过条目的MySQL MAX值

  4. 4

    使用SQL Group by并具有

  5. 5

    使用lodash查找具有真实值的JS对象的属性

  6. 6

    如何使用PostgreSQL在任何列中查找具有NULL值的所有行

  7. 7

    使用MAX DATE和GROUP BY提取行

  8. 8

    从每个GROUP BY(unique_id)和ORDER BY编号中选择具有MAX ID的SELECT行

  9. 9

    使用GROUP BY条件查找丢失的序列值

  10. 10

    使用dplyr查找具有相同值的下2行并将行粘贴到原始条目后面的新列中

  11. 11

    使用group by在SQL中查找具有列的特定值的列的总和

  12. 12

    使用SQL窗口函数填充1列具有值0的行,可能具有行索引的下一个max / prev min值

  13. 13

    Ruby使用max_by在多维数组中查找具有最大值的元素

  14. 14

    SQL使用GROUP BY查找最多最近的行

  15. 15

    使用GROUP BY跳过条目的MySQL MAX值

  16. 16

    如何使用Python Win32com在Excel中查找最后一行是否具有特定列的值

  17. 17

    使用Linq在group子句中获取多个MAX值

  18. 18

    如何使用Unix命令为特定列查找具有相同值的文件中的行?

  19. 19

    在具有值数组的行上使用group_concat

  20. 20

    在R中使用具有连续值的查找表

  21. 21

    使用datediff查找行之间具有给定间隔的最小值

  22. 22

    使用imhist函数后如何查找具有指定值的垃圾箱?

  23. 23

    Mysql 使用 max(count/ group by) 使用 join

  24. 24

    使用 group by 更新列值

  25. 25

    使用 SQL 查找具有特殊字符的值的列

  26. 26

    如何使用 GROUP BY 获得 MAX 行?

  27. 27

    使用 GROUP BY 对行中列的值求和

  28. 28

    使用 Group By Not Working 存储值?

  29. 29

    使用 jquery 输入后查找具有特定类的跨度

热门标签

归档