我需要附带一个SQL ( Server),它根据当前的sg获取最早的日期。下面是样本表,其中当前sg为4-3 (当前因为结束日期为1900-01-01)。我想知道每个员工实际开始sg的日期(即2015-01-01)。我真的需要一些帮助。
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
发布于 2017-03-29 07:20:22
如果我正确地理解了您,您可以使用内部查询来完成这两项任务。
select min(date_from)
from yourTable
where sg = (
select sg
from yourTable
where date_to = '1900-01-01'
)
或加入
select min(t1.date_from)
from yourTable t1
join yourTable t2
on t1.sg = t2.sg
where t2.date_to = '1900-01-01'
编辑
要获得每个职位的最小日期,最简单的方法是将第二个查询调整为:
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
列中每个值的最小日期,所以您需要做的是
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 这里上看到
发布于 2017-03-29 07:21:08
如果一个sg不能有多个位置,您可以使用下一个查询
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
发布于 2017-03-29 07:36:59
解决方案:
SELECT TOP 1 *
FROM YourTableNameHere
ORDER BY Sg DESC, Date_From
更多详情:
下面我使用了一个临时表,您可以在一个新的查询窗口中运行。
试试这个:
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
https://stackoverflow.com/questions/43086704
复制相似问题