假设我有一个包含以下信息的表:sq db2
ID NAME Date1 Date2 code
01 Tommy 2022-09-10 2022-09-30 45
01 Tommy 2022-10-01 2022-12-31 44
02 Elis 2022-07-13 2022-08-03 45
02 Elis 2022-08-04 2022-08-31 45
03 John 2022-08-10 2022-09-27 44
04 John 2022-09-28 null 45
有没有一种方法,我可以在表上执行选择,以获得以下(sql:DB2)我的意思是得到所有的人,整个月的工作,并有45(代码)整个月(同一个月). Elisa她工作八月,并有45整个八月作为代码
ID NAME Date1 Date2 code
02 Elis 2022-07-13 2022-08-03 45
02 Elis 2022-08-04 2022-08-31 45
对我来说很难
谢谢
2条答案
按热度按时间wgx48brx1#
1.创建一个按
ID
对数据进行GROUPS
的子查询。HAVING
MAX
Date2
,并将其与Date2
的该月最后一天进行比较。HAVING
MIN
Date1
,并将其与Date1
的该月第一天进行比较。WHERE
code
='45'小提琴
kninwzqo2#
类似的任务通常用下面的方法来解决。这不是一个完整的解决方案,而是一个开始的方法。
| 识别码|名称|日期1|日期2|代码|毛利率|日期1_分钟|日期2_最大|
| - -| - -| - -| - -| - -| - -| - -| - -|
| 01年|托米|2022年9月10日|2022年9月30日|四十五|一个|2022年9月10日|2022年9月30日|
| 二|伊利斯|2022年7月13日|2022年7月14日|四十五|一个|2022年7月13日|2022年7月14日|
| 二|伊利斯|2022年7月16日|2022年8月3日|四十五|2个|2022年7月16日|2022年8月31日|
| 二|伊利斯|2022年8月4日|2022年8月31日|四十五|2个|2022年7月16日|2022年8月31日|
| 04年|若翰|2022年9月28日||四十五|一个|2022年9月28日||
首先计算附加的"组"列(示例中为GRP)。
具有相同(ID、NAME、GRP)的所有记录都具有连续的(DATE1、DATE2)日期间隔。
最后,为每个这样的组计算(最小、最大)日期。
最困难的部分是为每个(min,max)区间构造一个表达式来理解,如果它在通常情况下覆盖了整个unknown月份(当然,对于一些fixed knownmonth来说很容易)。