首页 > 解决方案 > SQL Server 子查询

问题描述

我想结合 2 个 SQL 查询,第一个查询我想拉回最近一个月的员工记录,第二个查询拉回最近 3 个月的记录。

有一种疯狂的方法,员工可以每个月更换经理,但最近几个月的经理需要查看他们员工前 3 个月的记录,即使该员工在那几个月有不同的经理。

这是最近一个月的第一个选择

/******latest month*****************/
SELECT [REPORT_DT]
      ,[EMPLOYEE_ID]
      ,[EMPLOYEE_NAME]
      ,[LOCATION]
      ,[JOB_DESCRIPTION]
      ,[MANAGER_ID]
  FROM [EMPLOYEE]
  where [REPORT_DT]=
  (select max([REPORT_DT]) from [EMPLOYEE])

这是过去 3 个月的选择

/*********last 3 months*******************/
SELECT [REPORT_DT]
      ,[EMPLOYEE_ID]
      ,[EMPLOYEE_NAME]
      ,[LOCATION]
      ,[JOB_DESCRIPTION]
      ,[MANAGER_ID]
  FROM [EMPLOYEE]
  where [REPORT_DT]>=
  ( DATEADD(M, -3, GETDATE()))

我将加入 [EMPLOYEE_ID] 上的 2 个选择。有什么想法可以组合这两个查询吗?谢谢!

标签: sqlsql-server

解决方案


我会使用:

SELECT TOP 1 WITH TIES
    [REPORT_DT],
    [EMPLOYEE_ID],
    [EMPLOYEE_NAME],
    [LOCATION],
    [JOB_DESCRIPTION],
    [MANAGER_ID],
FROM [EMPLOYEE]
WHERE
    [REPORT_DT] >= DATEADD(M, -3, GETDATE()
ORDER BY
    [REPORT_DT] DESC;

上面的WHERE子句匹配您的第二个查询,我们使用一种TOP 1 WITH TIES方法来获取表中具有最大值的记录REPORT_DT


推荐阅读