首页 > 解决方案 > 计算日期差异后选择最大日期差异

问题描述

我正在学习一些基本的 SQL 查询技能,并使用日期。我成功获得了以下内容。

SELECT
    [FirstName],
    [LastName],
    [JobTitle],
    [JoiningDate]
    DATEDIFF(day, StartDate, '2021/03/20') AS DateDifference
FROM 
    [GenericITCompany].[dbo].[Employees]
WHERE 
    JobTitle = 'UnityDeveloper';

这将返回 Unity 团队的每个开发人员受雇于公司的天数。

现在,我想知道谁在公司工作的时间最长。

我试过这个:

SELECT
    [FirstName],
    [LastName],
    [JobTitle],
    [JoiningDate]
    DATEDIFF(day, StartDate, '2021/03/20') AS DateDifference
    MAX(DateDifference) AS LongestServingEmployee
FROM 
    [GenericITCompany].[dbo].[Employees]
WHERE 
    JobTitle = 'UnityDeveloper';

那是行不通的。我可能遗漏了一些非常明显的东西。

注意1:我了解Max的基本用法。例如,

SELECT 
    MAX(StartDate) AS MaximumStartDate
FROM
    [GenericITCompany].[dbo].[Employees]

但是,我主要在将 MAX 应用于查询生成的表时遇到挑战。我相信这是我的主要问题。

注2:我查看了一些存在类似问题的现有问题

获取列的最大值所在的行

如何在 SQL 中通过另一列选择具有 MAX(列值)、DISTINCT 的行?

但我无法从他们那里理解。

标签: sqlsql-server

解决方案


我不清楚您希望看到什么结果,您是否只想看到服务日期最长的员工(可能有联系?)

或者每一行上拥有最多天数的所有员工 - 这似乎是您的查询尝试执行的操作,在这种情况下,您可以执行以下操作,并按 LongestServiceEmployee 排序。我也用过GETDATE()你的硬编码日期

SELECT
    [FirstName],
    [LastName],
    [JobTitle],
    [JoiningDate]
    DATEDIFF(day, createdate, GETDATE()) AS DateDifference
    MAX(day, createdate, GETDATE()) over() AS LongestServingEmployee
FROM [dbo].[Employees]
WHERE JobTitle = 'UnityDeveloper'
order by LongestServingEmployee desc;

如果您只想找到具有最大值的员工,则将查询包装在外部select和过滤器中:

SELECT* FROM (
  SELECT
    [FirstName],
    [LastName],
    [JobTitle],
    [JoiningDate]
    DATEDIFF(day, createdate, GETDATE()) AS DateDifference
    MAX(day, createdate, GETDATE()) over() AS LongestServingEmployee
  FROM [dbo].[Employees]
  WHERE JobTitle = 'UnityDeveloper'
)e
WHERE Datedifference=LongestServingEmployee

推荐阅读