在一组结果中明确选择最新日期

杰克·哈德卡斯尔

我有一个查询(在下面显示),生成以下结果集(此操作将继续处理53,000条记录)

+--------+---------+--------+--------+------------+------------+
| emp_no | counter | emp_no | salary | from_date  | to_date    |
+--------+---------+--------+--------+------------+------------+
|  10001 |       1 |  10001 |  60117 | 1986-06-26 | 1987-06-26 |
|  10001 |       1 |  10001 |  62102 | 1987-06-26 | 1988-06-25 |
|  10001 |       1 |  10001 |  66074 | 1988-06-25 | 1989-06-25 |
|  10001 |       1 |  10001 |  84917 | 1999-06-23 | 2000-06-22 |
|  10001 |       1 |  10001 |  85112 | 2000-06-22 | 2001-06-22 |
|  10001 |       1 |  10001 |  85097 | 2001-06-22 | 2002-06-22 |
|  10001 |       1 |  10001 |  88958 | 2002-06-22 | 9999-01-01 |
|  10002 |       2 |  10002 |  65828 | 1996-08-03 | 1997-08-03 |
|  10002 |       2 |  10002 |  65909 | 1997-08-03 | 1998-08-03 |
|  10002 |       2 |  10002 |  67534 | 1998-08-03 | 1999-08-03 |
|  10002 |       2 |  10002 |  69366 | 1999-08-03 | 2000-08-02 |
|  10002 |       2 |  10002 |  71963 | 2000-08-02 | 2001-08-02 |
|  10002 |       2 |  10002 |  72527 | 2001-08-02 | 9999-01-01 |
...

在X号员工可以存储多个薪水的地方,我用来获取此薪水的查询是:

SELECT * FROM (
    SELECT dept_emp.emp_no, @counter := @counter+1 AS counter 
    FROM (select @counter:=0) AS initvar, dept_emp) 
AS employeeFilter 
LEFT JOIN(salaries) 
ON (salaries.emp_no = employeeFilter.emp_no) 
WHERE counter <= (25/100 * @counter) LIMIT 100;

我希望为每个唯一的emp_no(最近的薪水行)(基于to_date字段)获取一行

+--------+---------+--------+--------+------------+------------+
| emp_no | counter | emp_no | salary | from_date  | to_date    |
+--------+---------+--------+--------+------------+------------+
|  10001 |       1 |  10001 |  88958 | 2002-06-22 | 9999-01-01 |
|  10002 |       2 |  10002 |  72527 | 2001-08-02 | 9999-01-01 |

@counter实施是不是这个问题很重要,但它确实需要保持在该查询,因为我期待最终建立一个查询,将产生的切割25%部门的成本和@counter可变让我限制结果的百分比。

试图使用DISTINCT,select DISTINCT (emp_no)但我并不是最好的人,这只会引起更多问题。

萨加斯

您可以使用JOIN做出与ROW_NUMBER相同的逻辑:

SELECT * FROM (
    SELECT t.*,count(*) as rnk
    FROM (YourQuery/table) t
    INNER JOIN (YourQuery/table) s
    ON (t.emp_no = s.emp_no AND t.from_date <= s.from_date))
WHERE rnk = 1

或与相关查询:

SELECT * FROM (YourQuery) t
WHERE from_date = (select max(s.from_date) 
                   FROM (YourQuery) s
                   WHERE s.emp_no = t.emp_no)

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

QUERY函数可从一组数据中获取最新日期

来自分类Dev

获取MySQL组中的最新日期

来自分类Dev

如何按号码为每个组选择最新日期?

来自分类Dev

雄辩的-获取最新日期并将结果插入到另一个表中

来自分类Dev

选择最新日期的帐号

来自分类Dev

选择一列中具有最新日期的行

来自分类Dev

使用dplyr从每个组的另一列中确定另一个日期之前的最新日期?

来自分类Dev

mysql - 如何从以下结果中仅获取最新日期?

来自分类Dev

在组中分配最新日期的值

来自分类Dev

查找结果集中的最新日期

来自分类Dev

SQL查询最新日期的不同结果

来自分类Dev

SQL - 如何从具有相同主键的组行中选择最新日期

来自分类Dev

如何从结果表分组中仅选择一组行?

来自分类Dev

如何从使用组对象创建的每个组中查找最新日期

来自分类Dev

从加入中选择最新日期

来自分类Dev

MySQL选择最新日期-单表

来自分类Dev

获取每个 id 的一个结果,但只获取最新日期的结果

来自分类Dev

在SQL Server中选择一组日期

来自分类Dev

获取按最早日期排序的单个 MySQLi 结果中的最早和最新日期

来自分类Dev

根据每个组的最新日期查找组的均值

来自分类Dev

SQL从一组数据中获取最新记录

来自分类Dev

获取一组重复行中的最新行

来自分类Dev

SQL从一组数据中获取最新记录

来自分类Dev

如何根据日期组的最新日期过滤数据?

来自分类Dev

从两个表中创建一个临时表,选择一个特定日期之前的最新日期

来自分类Dev

尝试使用 max 在数组中查找最新日期但得到不同的结果

来自分类Dev

访问-选择具有最新日期的唯一行

来自分类Dev

在javascript中添加最新日期

来自分类Dev

筛选r中的最新日期

Related 相关文章

热门标签

归档