小编dk9*_*96m的帖子

如何选择该组的日期为空或最大日期的行

我有一个包含多列的表,但我会让它变得简单,只使用三列。

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)

sql sql-server null greatest-n-per-group

2
推荐指数
1
解决办法
1704
查看次数

SQL结合类似的表

我不确定它是否只是周一的脑屁,但我无法弄清楚如何将这两个表结合起来.

表格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月那样.我怎样才能实现这一目标.

sql sql-server

1
推荐指数
1
解决办法
52
查看次数

SQL Server之间的语句

我有两列,年份和支付期(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,但我不能指望.

sql sql-server between

0
推荐指数
1
解决办法
49
查看次数

标签 统计

sql ×3

sql-server ×3

between ×1

greatest-n-per-group ×1

null ×1