我有一个包含多列的表,但我会让它变得简单,只使用三列。
CREATE TABLE TEMPTBL(
empl_id varchar(8),
empl_no varchar(6),
sep_dt date
);
INSERT INTO TEMPTBL
VALUES
('IS000001', '112233', NULL),
('00418910', '112233', '1/1/2019');
Run Code Online (Sandbox Code Playgroud)
我想要获取的是 sep_dt 为空的行或最大 sep_dt 按 empl_no 字段分组的行。因此,在我的示例中,这将是第一行“IS000001”(我只希望选择返回 empl_id)。假设 Null 是“6/8/2018”,那么我想返回“00418910”。
我已经尝试过,但我知道这是错误的,因为你不能像这样使用 max :
SELECT empl_id
FROM TEMPTBL empl
WHERE empl_no = '112233' AND (
sep_dt IS NULL OR
MAX(sep_dt)
)
Run Code Online (Sandbox Code Playgroud)
我知道它必须包括一个分组或可能是一个连接。所以我想出了这个:
SELECT empl_id
FROM TEMPTBL
INNER JOIN (
SELECT empl_no, max(sep_dt) as sep_dt
FROM TEMPTBL
WHERE empl_no = '112233'
GROUP BY empl_no
) emp ON TEMPTBL.empl_no = emp.empl_no AND …Run Code Online (Sandbox Code Playgroud) 我不确定它是否只是周一的脑屁,但我无法弄清楚如何将这两个表结合起来.
表格1
Year Month EMS
2014 October 1
2015 January 6
2015 February 1
2015 April 4
Run Code Online (Sandbox Code Playgroud)
表2
Year Month TaRR
2015 January 28
2015 February 6
2015 March 7
2015 April 5
Run Code Online (Sandbox Code Playgroud)
决赛桌
Year Month TaRR EMS
2014 October 0 1
2015 January 28 6
2015 February 6 1
2015 March 7 0
2015 April 5 4
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,这两个表都有年份和月份,虽然一个表或另一个表可能一年缺少一个月,就像表2没有2014年10月那样.我怎样才能实现这一目标.
我有两列,年份和支付期(1,2,3,4 ......).我正在绞尽脑汁试图弄清楚如何根据这些做一个介于两者之间.
比如说我有:
2017 1
2017 2
2017 3
2017 4
-------------v
2017 5
2017 6
...
2017 51
2017 52 (typically, not guaranteed to be 52 periods)
2018 1
2018 2
2018 3
2018 4
-------------^
2018 5
...
Run Code Online (Sandbox Code Playgroud)
我想选择2017(5)和2018(4)之间的所有行,我该怎么做?我尝试了几种不同的方法,但无法弄明白.薪酬期通常是1-52,但我不能指望.