【问题标题】:need employee details who has only one employment需要只有一份工作的员工详细信息
【发布时间】:2016-01-28 04:52:28
【问题描述】:

需要只有一份工作的员工详细信息

例如这是一张桌子

ID 名称 开始日期 结束日期 1 费舍尔 01-May-97 Jan-99 1 费舍尔 92 年 5 月 8 日 99 年 2 月 2 日 1 菲舍尔 92 年 5 月 11 日 10 年 5 月 4 日 2 大卫 1980 年 8 月 10 日 1981 年 5 月 5 日 3 约翰 1988 年 9 月 12 日 2009 年 6 月 6 日 3 约翰 92 年 8 月 23 日 2011 年 11 月 1 日

这样的输出

2 大卫 1980 年 8 月 10 日 1981 年 5 月 5 日

【问题讨论】:

  • 您正在使用哪个 RDMS..??
  • 请表现出一些努力...
  • 使用 group by 子句,其中 group 有 count = 1

标签: sql


【解决方案1】:
    Select * from
    (select *,row_number() over (partition by id order by StartDate desc ) as rnm
    from your table
    )Derived_Table
    where Derived_Table.rnm=1;

select * from table where id in (
select id
from table group by id having count(*) =1) z;

【讨论】:

  • @Patrick ..同意你的观点,但所有标准的如 oracle,sql server teradata 都支持它......我工作其中之一......所以这是自发的反应......
  • 第二个查询有一个子选择试图返回两列,但只与一列比较...从选择列表中删除 count(*)。
【解决方案2】:

如果相同的用户名没有任何其他日期,请使用 NOT EXISTS 返回用户。

select ID, Name, StartDate, EndDate
from tablename t1
where not exists (select 1 from tablename t2
                  where t2.id = t1.id
                    and (t2.StartDate <> t1.StartDate
                         or t2.EndDate <> t1.EndDate))

或者,有一个返回所有 id 只出现一次的子查询:

select ID, Name, StartDate, EndDate
from tablename t1
where id in (select id from tablename
             group by id
             having count(*) = 1)

【讨论】:

    猜你喜欢
    • 2015-08-13
    • 2020-10-08
    • 2011-03-08
    • 2023-02-07
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    相关资源
    最近更新 更多