我有两张 table
员工
+=======+==========+
|id |level |
+=======+==========+
|1 |1 |
|2 |2 |
+=======+==========+
员工级别
+=======+========+==========+
|emp_id |level |date |
+=======+========+==========+
|1 |2 |2016-08-01|
|1 |1 |2012-08-01|
|2 |2 |2012-08-01|
+=======+========+==========+
我想看看employee
的级别是否与最近的emp_level
匹配,所以有点像这样
+=================+===============+===============+
|emp_level.emp_id |employee.level |emp_level.level|
+=================+===============+===============+
|1 |1 |2 |
|2 |2 |2 |
+=================+===============+===============+
我已经尝试过UNION
,但第二个表的结果位于不同的行,并且我不知道如何对所有 emp_id 执行此操作。我的查询:
(select id, level from employee where id="957")
union all
(select emp_id as id, level from emp_level where
emp_id= "957" order by date desc limit 1)
最佳答案
您可以尝试以下查询:
SELECT
E.id,
E.level,
maxDateLevelTable.level
FROM employee E
LEFT JOIN
(
SELECT
EL.*
FROM emp_level EL
INNER JOIN
(
SELECT
emp_id,
MAX(date) max_date
FROM emp_level
GROUP BY emp_id
) AS t
ON t.emp_id = EL.emp_id AND t.max_date= EL.date
) AS maxDateLevelTable
ON E.id = maxDateLevelTable.emp_id
ORDER BY E.id;
注意:您可以替换 LEFT JOIN
通过INNER JOIN
如果在 emp_level
中始终为每个员工找到一个条目表。
说明:
如果您单独运行此查询
SELECT
EL.*
FROM emp_level EL
INNER JOIN
(
SELECT
emp_id,
MAX(date) max_date
FROM emp_level
GROUP BY emp_id
) AS t
ON t.emp_id = EL.emp_id AND t.max_date= EL.date
那么您将从 emp_level
获取每个员工的最新数据表。
稍后制作inner join
上述查询的结果和 employee
之间表以便从 employee
中获取相应的级别表。
关于mysql - 比较两个表的值与一个表中的多个日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39071298/