SQL 中的下一个正数日期
Posted
技术标签:
【中文标题】SQL 中的下一个正数日期【英文标题】:Next positive date in SQL 【发布时间】:2021-11-06 05:35:59 【问题描述】:p_date | Qty | Available | Type |
---|---|---|---|
11/04/2021 | -1 | 2 | Debit |
11/08/2021 | -1 | 1 | Debit |
11/09/2021 | -1 | 0 | Debit |
11/15/2021 | -1 | -1 | Debit |
11/17/2021 | -5 | -6 | Debit |
11/18/2021 | -50 | -56 | Debit |
11/18/2021 | -3 | -59 | Debit |
11/18/2021 | -1 | -60 | Debit |
11/20/2021 | 10 | -50 | Credit |
11/21/2021 | 100 | 50 | Credit |
11/21/2021 | -1 | 49 | Debit |
11/24/2021 | -62 | -13 | Debit |
11/26/2021 | -4 | -17 | Debit |
11/30/2021 | -1 | -18 | Debit |
我有一个类似上面的表格,其中“数量”可能是正数或负数,具体取决于“类型”列是“借方”还是“贷方”。
我想编写一个 SQL 查询来向表中添加一个额外的列,如下所示,以在“可用”列变为正数时显示下一个正 p_date。 注意:当'Available'已经为正数时,'Next Positive p_date'列将显示'p_date'列。
p_date | Qty | Available | Type | Next Positive p_date |
---|---|---|---|---|
11/04/2021 | -1 | 2 | Debit | 11/04/2021 |
11/08/2021 | -1 | 1 | Debit | 11/08/2021 |
11/09/2021 | -1 | 0 | Debit | 11/09/2021 |
11/15/2021 | -1 | -1 | Debit | 11/21/2021 |
11/17/2021 | -5 | -6 | Debit | 11/21/2021 |
11/18/2021 | -50 | -56 | Debit | 11/21/2021 |
11/18/2021 | -3 | -59 | Debit | 11/21/2021 |
11/18/2021 | -1 | -60 | Debit | 11/21/2021 |
11/20/2021 | 10 | -50 | Credit | 11/21/2021 |
11/21/2021 | 100 | 50 | Credit | 11/21/2021 |
11/21/2021 | -1 | 49 | Debit | 11/21/2021 |
11/24/2021 | -62 | -13 | Debit | 12/05/2021 |
11/26/2021 | -4 | -17 | Debit | 12/05/2021 |
11/30/2021 | -1 | -18 | Debit | 12/05/2021 |
12/05/2021 | 80 | 62 | Credit | 12/05/2021 |
【问题讨论】:
请不要添加垃圾标签,只添加您实际使用的 DBMS 的标签,因为它们都不同。 这能回答你的问题吗? How to make LAG() ignore NULLS in SQL Server? @rain_maker 您使用的是哪个特定的 RDBMS(mysql/Postgresql/Snowflake)? 我正在使用 Snowflake。 @Lukasz 是否可以跟踪使用的数量。如下所示。 ***.com/questions/69865551/… 【参考方案1】:可以通过LEAD
窗口函数实现:
SELECT *, CASE WHEN Available >= 0 THEN p_date
ELSE LEAD(CASE WHEN Available > 0 THEN p_date END) IGNORE NULLS
OVER(ORDER BY p_date)
END next_p_date
FROM tab
ORdER BY p_date;
工作原理:如果 Available 小于 0,CASE 表达式将 p_date 无效,并且 IGNORE NULLS 会跳过该 p_date(有效地找到第一个可用的正数 p_date)
【讨论】:
以上是关于SQL 中的下一个正数日期的主要内容,如果未能解决你的问题,请参考以下文章
如何获取不在 30 天内的下一个最小日期并用作 SQL 中的参考点?