假设我有一个表,其中有很多列,但是必须只通过Id和EndDate过滤返回。
| 身份证|结束日期|...|
| - ------|- ------|- ------|
| 1个|零||
| 1个|2022年1月1日15时25分||
| 1个|二○二二年一月一日||
| 第二章|2022年1月15日上午10时||
| 第二章|2022年1月15日上午11时||
| 第二章|2022年1月17日零时||
| 三个|零||
| 三个|2022年10月10日22:12||
| 四个|二○二二年五月十八日十七时十五分||
| 四个|2022年5月18日17时17分||
| 四个|2022年5月19日零时||
生成的表必须如下所示:
| 身份证|结束日期|...|
| - ------|- ------|- ------|
| 1个|零||
| 第二章|2022年1月17日零时||
| 三个|零||
| 四个|2022年5月19日零时||
必须选择具有特定ID的记录,否则该记录的EndDate值为NULL或MAX值。如结果表所示,ID = 1的记录的EndDate为NULL,因此必须选择该记录,ID = 4的记录没有可为NULL的EndDate,因此必须返回具有MAX(EndDate)的值。
我尝试了不同的场景与连接和联合,但它似乎绝望。此外,我考虑了CTE表的东西,但它似乎无关。重点也是得到一个最佳的解决方案,因为结果表被认为是连接到另一个表。如果至少有一个想法,如何得到一个想要的结果,我将不胜感激。
2条答案
按热度按时间wbgh16ku1#
您可以在公用表表达式中使用ROW_NUMBER来定义优先级。只需将NULL替换为遥远的未来日期(如9999-12-31),然后就可以对日期进行排序。
but5z9lq2#
使用简单的聚合和
CASE
表达式(检查每个Id
是否有null
日期):仅当所有日期不是
null
时,才满足条件COUNT(*) = COUNT(EndDate)
。请参见demo。