SQL 从同一个 table 中获取不同值的查询
SQL query to fetch distinct values from same table
假设我有这个 table: 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
我想从这个 table 中获取数据,其中 (1,2,4) 是空的。那将 return:
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
如何实现?
您可以使用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)
您可以使用 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);
假设我有这个 table: 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 |
我想从这个 table 中获取数据,其中 (1,2,4) 是空的。那将 return:
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 |
如何实现?
您可以使用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)
您可以使用 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);