首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何根据当前的sg选择最早的日期

如何根据当前的sg选择最早的日期
EN

Stack Overflow用户
提问于 2017-03-29 07:11:38
回答 3查看 71关注 0票数 2

我需要附带一个SQL ( Server),它根据当前的sg获取最早的日期。下面是样本表,其中当前sg为4-3 (当前因为结束日期为1900-01-01)。我想知道每个员工实际开始sg的日期(即2015-01-01)。我真的需要一些帮助。

代码语言:javascript
运行
复制
empno      position             sg           date_from         date_to
4508       ADMIN AIDE IV        4-3          2017-01-01        1900-01-01
4508       ADMIN AIDE IV        4-3          2016-01-01        2016-12-31
4508       ADMIN AIDE IV        4-3          2015-01-01        2015-12-31
4508       ADMIN AIDE IV        4-2          2014-01-01        2014-12-31
4508       ADMIN AIDE IV        4-2          2013-01-01        2013-12-31
1207       AIRCRAFT MECHANIC I  6-1          1988-01-01        1989-06-30
1207       AIRCRAFT MECHANIC II 8-7          2006-05-08        2015-12-31
1207       AIRCRAFT MECHANIC II 8-8          2016-01-01        1900-01-01
0889       DATA ENTRY OPERATOR  1-1          2000-12-12        2001-06-30
0889       ADMIN ASSISTANT VI   12-5         2017-03-10        1900-01-01
0889       ADMIN ASSISTANT VI   12-5         2016-01-01        2016-12-31
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-03-29 07:20:22

如果我正确地理解了您,您可以使用内部查询来完成这两项任务。

代码语言:javascript
运行
复制
select  min(date_from)
from    yourTable
where   sg = (
            select  sg
            from    yourTable
            where   date_to = '1900-01-01'
        )

或加入

代码语言:javascript
运行
复制
select  min(t1.date_from)
from    yourTable t1
join    yourTable t2
on      t1.sg = t2.sg
where   t2.date_to = '1900-01-01'

编辑

要获得每个职位的最小日期,最简单的方法是将第二个查询调整为:

代码语言:javascript
运行
复制
select  t1.position, min(t1.date_from)
from    yourTable t1
join    yourTable t2
on      t1.sg = t2.sg and
        t1.position = t2.position
where   t2.date_to = '1900-01-01'
group by t1.position

编辑2

由于需求是获取empno列中每个值的最小日期,所以您需要做的是

代码语言:javascript
运行
复制
select  t1.empno, min(t1.date_from)
from    yourTable t1
join    yourTable t2
on      t1.sg = t2.sg and
        t1.empno = t2.empno
where   t2.date_to = '1900-01-01'
group by t1.empno

你可以在work 这里上看到

票数 1
EN

Stack Overflow用户

发布于 2017-03-29 07:21:08

如果一个sg不能有多个位置,您可以使用下一个查询

代码语言:javascript
运行
复制
SELECT t.position, t.sg, MIN(date_from) AS date_from
FROM @t AS t
    INNER JOIN 
      (select sg from @t where date_to = '19000101') as cur
    ON t.sg = cur.sg
GROUP BY t.position, t.sg
票数 1
EN

Stack Overflow用户

发布于 2017-03-29 07:36:59

解决方案:

代码语言:javascript
运行
复制
SELECT TOP 1 *
FROM YourTableNameHere
ORDER BY Sg DESC, Date_From

更多详情:

下面我使用了一个临时表,您可以在一个新的查询窗口中运行。

试试这个:

代码语言:javascript
运行
复制
CREATE TABLE #TempTable(
 Position varchar(20),
 Sg varchar(3),
 Date_From datetime,
 Date_To datetime)

INSERT INTO #TempTable (Position, Sg, Date_From, Date_To) 

SELECT 
        'ADMIN AIDE IV', '4-3', '2017-01-01', '1900-01-01'
UNION
SELECT 
        'ADMIN AIDE IV', '4-3', '2016-01-01', '2016-12-31'
UNION
SELECT 
        'ADMIN AIDE IV', '4-3', '2015-01-01', '2015-12-31'
UNION
SELECT 
        'ADMIN AIDE IV', '4-2', '2014-01-01', '2014-12-31'
UNION
SELECT 
        'ADMIN AIDE IV', '4-2', '2013-01-01', '2013-12-31'


SELECT TOP 1 *
FROM #TempTable
ORDER BY Sg DESC, Date_From
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43086704

复制
相关文章

相似问题

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