首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择上次薪资

选择上次薪资
EN

Stack Overflow用户
提问于 2017-02-16 12:49:29
回答 4查看 888关注 0票数 1

我有两个表(我的例子):

TB1

代码语言:javascript
复制
Emp_code     salary     year   month 
-------      -----      ----   -----
1             2000       2015   1
1             2000       2015   2 
2             4000       2015   2
2             4000       2015   3

TB2

代码语言:javascript
复制
code          name       Age 
-------      -----      ----   
1             MMMM       32
1             MMMM       32 
2             KKKK       25   
2             KKKK       25   

我需要选择最近(月份和年份)获取工资>>

结果应如以下table>>所示

代码语言:javascript
复制
code          name       Age    salary   year   month
-------      -----      ----    ------   ----   -----
1             MMMM       32      2000    2015     2
2             KKKK       25      4000    2015     3
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-02-16 15:34:15

为employee和salary表创建脚本

代码语言:javascript
复制
CREATE TABLE [dbo].[Employee](
[Empcode] [varchar](50) NULL,
[Name] [varchar](50) NULL,
[Age] [varchar](50) NULL) ON [PRIMARY]


CREATE TABLE [dbo].[Salary](
[Empcode] [varchar](50) NULL,
[Salary] [varchar](50) NULL,
[Year] [varchar](50) NULL,
[Month] [varchar](50) NULL
) ON [PRIMARY]

薪资表数据

代码语言:javascript
复制
1   10000   2017    1
1   10000   2017    2
2   40000   2017    2
2   40000   2017    3

employee表数据

代码语言:javascript
复制
1   aaa 25
2   bbb 25

查询:-

代码语言:javascript
复制
select e.empcode,e.name,e.age,s.salary,max(s.year) as year,max(s.month) as month from salary s join employee e on s.empcode=e.empcode group by e.empcode,e.name,e.age,s.salary

输出:-

代码语言:javascript
复制
1   aaa 25  10000   2017    2
2   bbb 25  40000   2017    3
票数 0
EN

Stack Overflow用户

发布于 2017-02-16 13:06:22

代码语言:javascript
复制
SELECT *
FROM ( 
       SELECT t1.code,
              t2.name,
              t2.Age,
              t1.salary,
              t1.year,
              t1.month,
              ROW_NUMBER OVER(PARTITION BY t1.Emp_code ORDER BY t1.year desc,t1.month desc) AS RN 
       FROM TB1 t1
       INNER JOIN TB2 t2 ON t1.Emp_code=t2.code
                                                 ) X
WHERE X.RN=1
票数 2
EN

Stack Overflow用户

发布于 2017-02-16 13:01:11

使用窗口函数和distinct

代码语言:javascript
复制
select . . .
from (select tb1.*,
             row_number() over (partition by emp_code order by year desc, month desc) as seqnum
      from tb1
     ) tb1 join
     (select distinct tb2.*
      from tb2
     ) tb2
     on tb1.code = tb2.emp_code;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42265201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档