【问题标题】:SELECT rows containing latest values选择包含最新值的行
【发布时间】:2017-06-11 01:55:24
【问题描述】:

我如何SELECT column1 注册表,其中 column2 具有最新日期且不为空?

例如,我只需要返回第 5 行 (employee3)。

【问题讨论】:

    标签: sql tsql select


    【解决方案1】:

    这个怎么样?

    SELECT Employee, MAX(Resignation) Resignation
      FROM table
     WHERE Resignation IS NOT NULL
     GROUP BY Employee
    

    或者,如果您的表格的列数比您显示的多,

     SELECT a.*
       FROM table a
       JOIN (
                  SELECT Employee, MAX(Resignation) Resignation
                    FROM table
                   WHERE Resignation IS NOT NULL
                   GROUP BY Employee
            ) b ON a.Employee = b.Employee AND a.Resigation = b.Resignation
    

    这是“查找具有极值的详细信息行”查询模式。

    【讨论】:

      【解决方案2】:

      更新了对问题的重新解释:

      我想你的意思是:

      返回当前已辞职的所有员工的最近辞职日期。目前辞职的定义是“拥有所有相同的员工记录,并为该员工填写了辞职日期”。离职日期为 NULL 的单个员工记录意味着该员工仍在工作;不管他们辞职多少次!

      这可以通过exists 使用correlated subquery 来完成。 和 max 以及 group by

      首先,我们得到所有未辞职员工的名单。 然后我们将我们的全部集合与未离职员工的集合进行比较,仅保留员工不在未离职员工列表中,然后我们按员工分组并获得最大辞职。

      SELECT Employee, Max(Resignation) Resignation
      FROM Table A
      WHERE NOT EXISTS (SELECT 1 
                        FROM Table B
                        WHERE A.Employee = B.Employee
                          and B.Resignation is null)  --Cooelation occurs here Notice how A
      GROUP BY Employee
      

      由于 A.EMPLOYEE 引用从table B 中删除了一级表TABLE A,因此在WHERE A.Employee = B.Employee 行上发生了冷却。

      很确定也有一种方法可以通过应用连接来做到这一点;但我还不太熟悉那种语法。

      【讨论】:

        猜你喜欢
        • 2020-07-19
        • 2014-09-07
        • 1970-01-01
        • 2021-07-20
        • 2016-06-20
        • 1970-01-01
        • 2021-09-15
        • 2021-11-21
        • 2019-10-03
        相关资源
        最近更新 更多