【问题标题】:Extracting Unknown Dates提取未知日期
【发布时间】:2016-11-10 22:21:00
【问题描述】:

我有两个表,Employees 和 Job_History。这两个表有三个相同的列:employee_id、job_id 和 department_id。

我需要显示Employees 表中的last_name 和department_id,以及每个员工工作20 周年的日期。

员工开始工作的日期位于 Job_History 表的 start_date 中。周年纪念日需要按如下格式显示:1 月 23 日、19 82 日。

    select e.last_name, e.department_id, count(*) as "20 Year Anniversary"
    from job_history l
    inner join employees e on e.department_id = l.department_id
    group by e.department_id, e.last_name
    having count(*) = l.start_date + 20;

现在当我运行它时,它告诉我这不是一个组函数。如何将其更改为正确的语法?

【问题讨论】:

  • 这不是一个代码编写(或家庭作业)网站。向我们展示您已经走了多远以及您遇到了哪些问题。这听起来像是一个相当简单的任务:加入表格,找到最早的日期,加上二十年? (为什么标题中的日期是“未知的”?)
  • 抱歉,我在完成所有操作之前不小心点击了“发布您的问题”。
  • 这是错误的:having count(*) = l.start_date + 20; ==> l.start_date + 20 不是组函数。

标签: sql oracle


【解决方案1】:

不确定您为什么要计算任何东西,更不用说将计数与日期进行比较。将 20 添加到日期会增加 20 个

这可能更接近你想要的:

select e.last_name, e.department_id,
  add_months(min(jh.start_date), 240) as "20 Year Anniversary"
from employees e
inner join job_history jh
on jh.employee_id = e.employee_id
group by e.employee_id, e.last_name, e.department_id;

表之间的连接仅在 emoloyee_id 上,因为您想要任何部门中任何工作的最早开始日期(大概)。

一旦你有了最早的日期,你可以添加 20 年,也就是 240 个月。

您可以阅读有关如何将日期格式化为字符串in the documentation

【讨论】:

  • 谢谢。但是当我运行你的代码时,出现了“Not a Group BY function”的错误。
  • @Tim - 正如您在后面的问题中指出的那样,您需要在分组依据中包含员工 ID;否则你会得到一个部门中两个姓氏相同的人的错误结果。
猜你喜欢
  • 1970-01-01
  • 2018-09-06
  • 1970-01-01
  • 2020-03-25
  • 1970-01-01
  • 2014-07-03
  • 2016-03-27
  • 2021-07-11
  • 2016-02-03
相关资源
最近更新 更多