【问题标题】:SQL query to fetch distinct values from same tableSQL查询从同一个表中获取不同的值
【发布时间】:2021-06-06 02:32:53
【问题描述】:

假设我有这张表:employeetable:

empid joindate location HRupdatedate Changes
1 2002-01-05 Delhi 2021-03-01 New
2 2009-09-09 Mumbai 2021-03-05 New
1 2010-06-27 Hyderabad 2021-03-03 Transfer
2 2015-11-02 Delhi 2021-03-06 Transfer
3 2020-01-01 Mumbai 2021-03-06 New
4 2007-07-30 Delhi 2021-03-04 New

我想从这个表中获取数据,其中 empid 在 (1,2,4) 中。这将返回:

empid joindate location HRupdatedate Changes
1 2002-01-05 Delhi 2021-03-01 New
2 2009-09-09 Mumbai 2021-03-05 New
1 2010-06-27 Hyderabad 2021-03-03 Transfer
2 2015-11-02 Delhi 2021-03-06 Transfer
4 2007-07-30 Delhi 2021-03-04 New

但我只需要没有重复条目的最新记录:

empid joindate location HRupdatedate Changes
1 2010-06-27 Hyderabad 2021-03-03 Transfer
2 2015-11-02 Delhi 2021-03-06 Transfer
4 2007-07-30 Delhi 2021-03-04 New

如何做到这一点?

【问题讨论】:

  • 为 sql-server 添加标签
  • SO 不是代码编写服务,您需要尝试一下并向我们展示您的尝试。

标签: sql sql-server duplicates distinct


【解决方案1】:

您可以使用WHERE 子句轻松实现此目的。

select * from  
employeetable et1
where 
    joindate = (
        select max(joindate)
            from employeetable et2 
            where et1.empid = et2.empid
    ) 
    and 
    empid in (1,2, 4);

或者为了更精确的结果

select * from  
employeetable et1
where 
    joindate = (
        select max(joindate)
            from employeetable et2 
            where et1.empid = et2.empid
    ) 
    and 
    HRupdatedate = (
        select max(HRupdatedate)
            from employeetable et2 where et1.empid = et2.empid
    )
    and 
    empid in (1,2, 4);

【讨论】:

  • 我将其与上一个答案进行了比较,发现使用您提供的第二个查询我可以获得最新数据。非常感谢!
【解决方案2】:

您可以使用top with ties

select top(1) with ties *
from employeetable
where empid in (1,2,4)
order by row_number() over(partition by empid order by joindate desc)

【讨论】:

  • @RoseK 。 . .这是一个方便而聪明的解决方案。但你应该知道,性能比其他解决方案略差。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-16
相关资源
最近更新 更多