gpt4 book ai didi

mysql - 清楚地选择一组结果中的最新日期

转载 作者:太空宇宙 更新时间:2023-11-03 11:51:00 25 4
gpt4 key购买 nike

我有一个查询(我在下面展示了这个)生成了以下结果集(这继续了 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)

关于mysql - 清楚地选择一组结果中的最新日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35552154/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com