sql - 计算日期差异后选择最大日期差异
问题描述
我正在学习一些基本的 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 的行?
但我无法从他们那里理解。
解决方案
我不清楚您希望看到什么结果,您是否只想看到服务日期最长的员工(可能有联系?)
或者每一行上拥有最多天数的所有员工 - 这似乎是您的查询尝试执行的操作,在这种情况下,您可以执行以下操作,并按 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
推荐阅读
- c# - 允许用户选择在计算器中显示整数或仅显示 2 位小数
- angular - 错误 TS2304:找不到名称“ClipboardItem”
- google-cloud-platform - 长时间超时的无服务器 python 请求?
- sql - 在 SQL (Snowflake) 中添加具有其他列的子字符串的列
- python - 将代码从更改单个字母更改为更改单词?
- javascript - 无法连接到 localhost 5000
- java - Java - 处理文件中的数据
- c# - c#8 中 netstandard2.0 和 net451 的 AllowNull 属性引发编译错误
- javascript - vue.js 粘性导航栏仅执行一次并出现错误:scrollTop 始终为 0
- kubernetes - 具有 Kubernetes 的用户特定容器