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 joinon 子句中:

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 天的分区视图和存档记录?

如何从最近 500 条记录中获取在线用户的总和?

如何获取在 SQL 中具有重复列组合的记录? [复制]

如何通过特殊原始数据从数据库中获取最近 7 天的记录

如何使用月份名称获取最近 3 个月的计数,如果该月份没有记录需要使用月份名称获取 0 [重复]

如何使用sql获取前一天的记录?