通过在 GRID DB 中编写查询来查找任何员工的最低体验

问题描述 投票:0回答:3

我正在处理 EmployeeDetails 表。我在该表中有 4 列(Empid、Empname、DateOfJoining、Salary)。我想编写一个查询来获取经验最低的员工的 Empid、Empname 和薪水。有人可以帮助我吗? 查询应该写在 GRID DB

我已经使用 DateADD() 函数尝试了这个查询。

sql sql-order-by greatest-n-per-group sql-date-functions griddb
3个回答
0
投票

我不认为你在这里需要日期功能。据我了解你的问题,我们可以只选择所有员工,

order by
加入日期和
limit

select empid, empname, salary
from employeeDetails
order by dateOfJoining limit 1

请注意,这不会以可预测的方式处理关系(如果有的话)。一个简单的解决方案是添加另一个排序标准以使结果稳定:

 order by dateOfJoining, empid limit 1

如果你真的希望查询返回所有关系,那么我们可以使用 window functions 代替:

select empid, empname, salary
from (
    select e.*, rank() over(order by dateOfJoining) rn
    from employeeDetails e
) e
where rn = 1

0
投票

我假设您正在使用 GridDB SQL。然后,您需要使用以下 5 个子句:

一个。 TIMESTAMP_DIFF GridDB 中的函数——比较两个时间戳/日期

TIMESTAMP_DIFF(time_unit, timestamp1, timestamp2 [, timezone])

where time_unit can be YEAR | MONTH | DAY | HOUR | MINUTE | SECOND | MILLISECOND

b。 TIMESTAMP 函数 - 将字符串日期转换为 griddb 中的时间戳

TIMESTAMP(timestamp_string [, timezone])

c。 NOW() 函数 - 获取 griddb 中的当前日期时间戳

NOW()

d。 LIMIT 函数 - 限制记录数

LIMIT __By-Number__

e。 ORDER BY 函数 - 按升序或降序排列行数

ORDER BY ASC/DESC

我正在按天获取员工的经验(通过将其与当前日期时间戳进行比较),但您可以通过在以下查询中替换天来为年或月执行此操作。我假设表中“DateOfJoining”列的类型为VARCHAR,这意味着它需要转换为时间戳。所以,最终的查询看起来像这样:

SELECT Empid, Empname, Salary , TIMESTAMP_DIFF(DAY, NOW(),TIMESTAMP(DateOfJoining)) as exper_by_days from employee order by exper_by_days;

您可以使用以下查询仅显示经验最少的前 5 行来限制记录数:

SELECT Empid, Empname, Salary , TIMESTAMP_DIFF(DAY, NOW(),TIMESTAMP(DateOfJoining)) as exper_by_days from employee order by exper_by_days LIMIT 5;

0
投票

您可以使用 DateOfJoining 列的 MIN() 函数来查找最早的加入日期,然后在子查询中使用它来获取员工详细信息。

这是一个使用 GridDB 语法的示例查询:

SELECT Empid, Empname, Salary
FROM EmployeeDetails
WHERE DateOfJoining = (
  SELECT MIN(DateOfJoining)
  FROM EmployeeDetails
)

如果有不止一位员工有相同的日期,你可以这样随机抽取一位:

SELECT top 1 Empid, Empname, Salary
    FROM EmployeeDetails
    WHERE DateOfJoining = (
      SELECT MIN(DateOfJoining)
      FROM EmployeeDetails
    )
© www.soinside.com 2019 - 2024. All rights reserved.