SQL:如何获取最近的记录
Posted
技术标签:
【中文标题】SQL:如何获取最近的记录【英文标题】:SQL: How to get recent record 【发布时间】:2020-09-12 12:32:29 【问题描述】:我需要帮助。如何获取两个单独表的最新记录? 表 1 是员工记录表,其中包含员工编号和员工姓名。 表 2 是包含员工编号、地址 1、地址 2、县、市、国家/地区、邮政编码和生效日期的地址表。
如何根据最近日期从两个表中获取最近的数据?
很遗憾,我的 SQL 不起作用。不知何故,我收到一个错误“'T3'附近的语法不正确”。我无法弄清楚那个不正确的语法是什么。请帮忙。谢谢!
SELECT T1.EmpNumber,
T1.EmpName,
T2.City,
T2.Country,
T2.EffDate
FROM EmployeeTable T1
LEFT OUTER JOIN AddressTable T2
ON T1.EmpNumber = T2.EmpNumber
AND T2.EffDate = (
SELECT EmpNumber,
MAX (EffDate) as RecentDate
FROM AddressTable
GROUP BY EmpNumber) T3 ON T1.EmpNumber = T3.EmpNumber AND T2.EffDate = T3.RecentDate
【问题讨论】:
请用您正在使用的数据库标记您的问题:sql-server、mysql、postgresql...?AND T2.EffDate = ( SELECT EmpNumber, MAX(EffDate) as RecentDate ...
您希望您的代码如何工作?您正在尝试测试与表的相等性。
【参考方案1】:
解决这个每组最大 n 个问题的可移植解决方案是使用子查询进行过滤 - 这也是您尝试的精神:
select e.employee_name, a.*
from EmployeeTable e
inner join AddressTable a on a.employee_number = e.employee_number
where a.effective_date = (
select max(a1.effective_date)
from AddressTable a1
where a1.employee_number = e.employee_number
)
如果您想允许没有地址的员工,那么您可以将过滤放在left join
的on
子句中:
select e.employee_name, a.*
from EmployeeTable e
left join AddressTable a
on a.employee_number = e.employee_number
and a.effective_date = (
select max(a1.effective_date)
from AddressTable a1
where a1.employee_number = e.employee_number
)
【讨论】:
以上是关于SQL:如何获取最近的记录的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SQL Server 2005 中创建和维护最近 7 天的分区视图和存档记录?