我有一个表,每个clientid包含几行。每一行来自不同的公司和不同的验证日期。
例如(你也可以在这个链接上找到它):
ID |COMPANY|GENDER|AGE|IS_SMOKER|VALIDATION_DATE |ZIP |ZIP_VALIDATION_DATE
--------------------------------------------------------------------------------
1111 | 1 | m |44 | 1 | 02-MAR-03 |12345 |02-MAR-03
1111 | 3 | m |43 | NULL | 03-FEB-10 |11111 |03-FEB-00
2222 | 1 | f |20 | 0 | 04-APR-00 |22344 |04-APR-00
2222 | 3 | f |50 | 0 | 05-MAY-82 |22344 |05-MAY-82
3333 | 1 | f |34 | 0 | 05-MAY-01 |33333 |01-MAY-00
3333 | 7 | f |34 | 1 | 05-MAY-00 |22222 |05-MAY-00
4444 | 3 | m |95 | NULL | 06-JUN-03 |12345 |02-MAR-03
我想为每个id获取一行,但每个数据具有不同的角色:
邮政编码,但邮政编码的最大日期是
smoker-如果是任何公司的smoker(1),则获取1如果有0,则获取1如果为null,则获取0获取null
其他数据-按最长验证日期
我想要的结果是:
ID |GENDER|AGE|IS_SMOKER|ZIP
---------------------------------
1111 | m |43 | 1 |12345
2222 | f |20 | 0 |22344
3333 | f |34 | 1 |22222
4444 | m |95 | NULL |12345
注:
当zip\u validation\u date仅对一列有效时,validation\u date适用于多个列。
我有几个不同角色的专栏(比如吸烟者)和另一个特定的验证日期。我没有将它添加到示例中,但我认为它将是相同的实现。
我试图找到最有效的方法来做到这一点,但我没有限制使用over partition、with、sub\u query或其他方法。
2条答案
按热度按时间q9rjltbz1#
如果我遵循正确的逻辑,您可以使用oracle的
keep
聚合功能:这是一把小提琴。
qv7cva1a2#
请使用下面的查询,
下面是演示,
https://dbfiddle.uk/?rdbms=oracle_18&fiddle=c834e8e07d58f714955eccb9704fc34b