【发布时间】:2021-11-30 03:14:08
【问题描述】:
我对 SQL 查询的逻辑有疑问,请帮我解决这个问题。
如何在 SQL Server 中为单个发票编号选择具有最早过帐日期的行:
现有表:
| INVOICE NUMBER | NAME | Posting date | Place |
|---|---|---|---|
| 2050 | Dinosaur | 20.05.1998 | London |
| 2050 | Dinosaur | 25.04.1995 | Australia |
| 2045 | Birds | 18.03.1997 | America |
| 2045 | Birds | 27.07.1995 | China |
| 2075 | Lion | 12.06.2012 | India |
我想这样查询输出:
| INVOICE NUMBER | NAME | Posting date | Place |
|---|---|---|---|
| 2050 | Dinosaur | 25.04.1995 | Australia |
| 2045 | Birds | 27.07.1995 | China |
| 2075 | Lion | 12.06.2012 | India |
我正在努力研究如何比较两个过帐日期的日期并返回 SQL Server 中每个发票编号的过帐日期列值最低的行。
我之前尝试使用MIN() 和INNER JOIN,但它对我复杂的代码库没有帮助,所以我在这里以简单的方式显示它。
编辑: 从上一个更新我希望此更改只发生在新创建的发票上,而不是已经存在的发票上,所以我想在发票日期时应用大于特定日期或仅当发票编号已存在于数据库中并且同一发票编号有两个过帐日期时才会发生。
如果示例数据库中不存在发票日期并且有两个过帐日期,则查询应该生成一个表,那么它应该显示具有最早过帐日期(具有相同发票号)的单行,例如:china
如果发票日期存在于示例数据库中并且有两个过帐日期,那么它应该显示所有具有相同发票编号且没有变化的行,例如:伦敦,澳大利亚
具有单一发布日期的其他行(无论它们是否存在于示例数据库中)它们应该显示它们的行。例如:印度
现有示例表:
| INVOICE NUMBER | NAME | Invoice Date | Posting date | Place |
|---|---|---|---|---|
| 2050 | Dinosaur | 20.03.1999 | 20.05.1998 | London |
| 2050 | Dinosaur | 20.03.1999 | 25.04.1995 | Australia |
| 2045 | Birds | 26.06.2005 | 18.03.1997 | America |
| 2045 | Birds | 26.06.2005 | 27.07.1995 | China |
| 2075 | Lion | 22.04.2012 | 12.06.2012 | India |
我想查询为单个查询以显示如下输出:
| INVOICE NUMBER | NAME | Invoice Date | Posting date | Place |
|---|---|---|---|---|
| 2050 | Dinosaur | 20.03.1999 | 20.05.1998 | London |
| 2050 | Dinosaur | 20.03.1999 | 25.04.1995 | Australia |
| 2045 | Birds | 26.06.2005 | 27.07.1995 | China |
| 2075 | Lion | 22.04.2012 | 12.06.2012 | India |
我无法将其作为单个 SELECT 查询,而且我还检查了特定日期而不是检查数据库,它也失败了。请帮我解决这个问题。
备注:这是示例表,它将用来自代码库的动态列填充动态值,因此,省略美国行是我不期望的输出,根据逻辑获取输出是预期的输出。
谢谢
【问题讨论】:
-
MySQL SQL Server - 请更正您的标签。
-
根据问题指南,请展示您的尝试并告诉我们您发现了什么(在本网站或其他地方)以及为什么它不能满足您的需求。
标签: sql sql-server tsql logic