【发布时间】:2021-12-24 03:03:27
【问题描述】:
所以我有 2 个使用 Inner Join 加入的表。 表一:
| Name | Batch_Date | AcctID |
|---|---|---|
| Bob | 18-08-11 | 32 |
| Bob | 19-08-11 | 32 |
| Shawn | 18-08-11 | 42 |
| Shawn | 20-08-11 | 42 |
| Paul | 18-08-11 | 36 |
| Paul | 19-08-11 | 36 |
表 2
| Code | order_Date | AcctID |
|---|---|---|
| 1 | 18-08-11 | 32 |
| 0 | NULL | 32 |
| 0 | NULL | 42 |
| 0 | NULL | 42 |
| 1 | 18-08-11 | 36 |
| 1 | 18-08-11 | 36 |
所以我想从表 1 中获取名称、last batch_date、AcctID 和代码,订单日期见表2。
这里对我的挑战是因为表 2 中有多行相同的 AcctId,如果对于任何 acctid,日期列不为空,我想选择该日期,如果每一行的日期列都为空,我想要为日期选择空值。
所以结果数据集应该如下所示:
| Name | Batch_Date | AcctID | Code | Order_Date |
|---|---|---|---|---|
| Bob | 19-08-11 | 32 | 1 | 18-08-11 |
| Shawn | 20-08-11 | 42 | 0 | NULL |
| Paul | 19-08-11 | 36 | 1 | 18-08-11 |
【问题讨论】:
-
这能回答你的问题吗? Get top 1 row of each group
-
@Larnu - 感谢您的快速回复。 Top 1 不起作用,因为我们可以获得相同的日期,也可以获得相同 ID 的一个空日期和一个日期。我想要是否有 1 个空值和 1 个日期 - 它应该选择日期,如果订单日期中的所有空值都应该选择空值。
-
为什么AcctID 42的期望输出显示18-08-11,20-08-11不是最新的吗?您是要查找具有订单的最新批次,还是仅查找每个 AcctID 的最新批次和最新订单?
-
@RobertSheahan - 是的,抱歉,日期应该是 20-08-11。我希望根据帐户 ID 获取所有最新的详细信息。
-
如果您使用该帖子 stackoverflow.com/questions/6841605/get-top-1-row-of-each-group 中的解决方案,您可以直接执行
ORDER BY order_Date DESC并且空行将排在最后
标签: sql sql-server database case inner-join