Sql server 从SQL Server SQL获取最小和最大日期
我表中的数据如下所示Sql server 从SQL Server SQL获取最小和最大日期,sql-server,Sql Server,我表中的数据如下所示 PAY_END_DT Sal 10/27/2013 0 11/10/2013 0 11/24/2013 2473.14 12/08/2013 0 01/19/2014 0 02/02/2014 0 02/16/2014 0 我期望的结果如下所示 10/27/2013 11/10/2013 12/08/2013 02/16/2014 我需要一个SQL来生成这个结果集。。请帮助我 以您的数据为例: PAY_END_DT Sal FULL_SET_
PAY_END_DT Sal
10/27/2013 0
11/10/2013 0
11/24/2013 2473.14
12/08/2013 0
01/19/2014 0
02/02/2014 0
02/16/2014 0
我期望的结果如下所示
10/27/2013 11/10/2013
12/08/2013 02/16/2014
我需要一个SQL来生成这个结果集。。请帮助我
以您的数据为例:
PAY_END_DT Sal FULL_SET_ORIDINAL ZERO_SET_ORDINAL "FULL - ZERO"
10/27/2013 0 1 1 0
11/10/2013 0 2 2 0
11/24/2013 2473.14 3 1 2
12/08/2013 0 4 3 1
01/19/2014 0 5 4 1
02/02/2014 0 6 5 1
02/16/2014 0 7 6 1
这样我们就可以只包含sal=0的行,然后按“满零”分组,得到两个集合,最后应用MIN()
和MAX()
函数
正如评论中所述,这被称为“缺口和孤岛”
尝试将“我需要一个SQL”替换为“我已经尝试了这个SQL查询,但它不起作用”,然后替换为“这是我尝试使用的查询”。这个网站是为了编程帮助,而不是“为我做我的工作”。你的答案集中的两行有什么区别?你的问题没有很好的说明。看起来您正试图解决一个“孤岛和缺口”样式的问题,但您没有说明为什么您特别期待这个结果。输入和输出之间的关系是什么?解释逻辑——我的意思是,确切地说,你的老板叫你做什么?好的巨魔,但这不是用来摆放的地方。@ RADUGHOGHIHU个人,根据所提供的信息,我认为这个答案是完全有效的。“Strawberry True,就像我说的,这是一个很好的巨魔,但是StackOverflow鼓励诚实和有益的回答。顺便说一句,我没有对答案投反对票。@草莓-在“技术上正确”和“建设性或有用”之间有着天壤之别。如果某事物不是后者,则它在StackOverflow上没有位置。(在此基础上,我认为它不是“完全有效的”;因为它无法满足SO答案的明确意图。)@MatBailie也许我们应该努力做到两者兼顾。您好,感谢SQL。我的sql输出应该是员工ID、开始日期和结束日期。在我的数据集中,员工12345从2013年10月27日到2013年11月10日,再从2013年12月8日到2014年2月26日没有收到Sal。。因此,我希望输出如下:第一行为1234510/27/1311/10/13,第二行为1234512/08/1302/26/14。希望这是更多的信息。提前感谢您的帮助。@Ravi-那么只需将EmployeId添加到GROUP BY和PARTITION BY子句中即可。@Ravi-请您投票支持并接受答案好吗?
SELECT
employee_id,
MIN(pay_end_dt) AS island_min_pay_end_dt,
MAX(pay_end_dt) AS island_max_pay_end_dt
FROM
(
SELECT
pay_end_dt,
ROW_NUMBER() OVER (PARTITION BY employee_id,
ORDER BY pay_end_dt ) AS full_set_ordinal,
ROW_NUMBER() OVER (PARTITION BY employee_id, sal
ORDER BY pay_end_dt ) AS zero_set_ordinal
FROM
yourTable
)
AS sorted_set
WHERE
sal = 0
GROUP BY
employee_id,
full_set_ordinal - zero_set_ordinal
;
PAY_END_DT Sal FULL_SET_ORIDINAL ZERO_SET_ORDINAL "FULL - ZERO"
10/27/2013 0 1 1 0
11/10/2013 0 2 2 0
11/24/2013 2473.14 3 1 2
12/08/2013 0 4 3 1
01/19/2014 0 5 4 1
02/02/2014 0 6 5 1
02/16/2014 0 7 6 1
1 1 1 1
0 0 0 0 0
1 2 3 4 5 6 7 8 9 - ordinal from the whole set
1 2 3 4 - ordinal from just the "islands"
1 2 3 4 5 - ordinal from just the "gaps"
2 2 2 3 - ordinal of the "islands" (whole_set_id - islands_id)
0 0 3 4 4 - ordinal of the "gaps" (whole_set_id - gaps_id)