如何找到今天的金额与上次在 SQL 中过帐交易的金额?
How do I find difference in today's amount and the amount the last time a transaction was posted in SQL?
我在 SQL 中有一个 table,它有几种不同的产品。例如,table 有 100 个产品,每个产品在 table 中对应一年中的每一天都有一行。
有些金额为 NULL,因为当天没有报告任何数据,但该行仍然存在。给大家举个table的例子,见下图:
ProductID / Date / Value
Product 1 / 2020-06-25 / 15.00
Product 1 / 2020-06-24 / 14.00
Product 1 / 2020-06-23 / 13.50
Product 1 / 2020-06-22 / NULL
Product 1 / 2020-06-21 / NULL
Product 1 / 2020-06-20 / 11.50
Product 2 / 2020-06-25 / 10.00
Product 2 / 2020-06-24 / 9.00
Product 2 / 2020-06-23 / 8.50
Product 2 / 2020-06-22 / 8.00
Product 2 / 2020-06-21 / 7.00
Product 2 / 2020-06-20 / 6.50
我正在尝试创建一个视图,按天显示每个产品的变化率,并排除 NULL 值。视图应该找到不是今天的最新日期,并且该值不为空,然后将其与今天的每个产品的数量进行比较。
换句话说,我希望视图显示以下内容:
a.ProductID / a.Date / a.Value / b.ProductID / b.Date / b.Value / ChangeinValue
Product 1 / 2020-06-25 / 15.00 / Product 1 / 2020-06-24 / 14.00 / 1.00
Product 1 / 2020-06-24 / 14.00 / Product 1 / 2020-06-23 / 13.50 / 0.50
*Product 1 / 2020-06-23 / 13.50 / Product 1 / 2020-06-20 / 11.50 / 2.00*
Product 2 / 2020-06-25 / 10.00 / Product 2 / 2020-06-24 / 9.00 / 1.00
Product 2 / 2020-06-24 / 9.00 / Product 2 / 2020-06-23 / 8.50 / 0.50
Product 2 / 2020-06-23 / 8.50 / Product 2 / 2020-06-22 / 8.00 / 0.50
Product 2 / 2020-06-22 / 8.00 / Product 2 / 2020-06-21 / 7.00 / 1.00
Product 2 / 2020-06-21 / 7.00 / Product 2 / 2020-06-20 / 6.50 / 0.50
如能就我如何创建此查询提供任何帮助,我们将不胜感激。
您可以使用 window 函数和一些过滤:
select *
from (
select
t.*,
lag(date) over(partition by productID order by date) lag_date,
lag(value) over(partition by productID order by date) lag_value,
value - lag(value) over(partition by productID order by date) change
from mytable t
where value is not null
) t
where lag_value is not null
我在 SQL 中有一个 table,它有几种不同的产品。例如,table 有 100 个产品,每个产品在 table 中对应一年中的每一天都有一行。
有些金额为 NULL,因为当天没有报告任何数据,但该行仍然存在。给大家举个table的例子,见下图:
ProductID / Date / Value
Product 1 / 2020-06-25 / 15.00
Product 1 / 2020-06-24 / 14.00
Product 1 / 2020-06-23 / 13.50
Product 1 / 2020-06-22 / NULL
Product 1 / 2020-06-21 / NULL
Product 1 / 2020-06-20 / 11.50
Product 2 / 2020-06-25 / 10.00
Product 2 / 2020-06-24 / 9.00
Product 2 / 2020-06-23 / 8.50
Product 2 / 2020-06-22 / 8.00
Product 2 / 2020-06-21 / 7.00
Product 2 / 2020-06-20 / 6.50
我正在尝试创建一个视图,按天显示每个产品的变化率,并排除 NULL 值。视图应该找到不是今天的最新日期,并且该值不为空,然后将其与今天的每个产品的数量进行比较。
换句话说,我希望视图显示以下内容:
a.ProductID / a.Date / a.Value / b.ProductID / b.Date / b.Value / ChangeinValue
Product 1 / 2020-06-25 / 15.00 / Product 1 / 2020-06-24 / 14.00 / 1.00
Product 1 / 2020-06-24 / 14.00 / Product 1 / 2020-06-23 / 13.50 / 0.50
*Product 1 / 2020-06-23 / 13.50 / Product 1 / 2020-06-20 / 11.50 / 2.00*
Product 2 / 2020-06-25 / 10.00 / Product 2 / 2020-06-24 / 9.00 / 1.00
Product 2 / 2020-06-24 / 9.00 / Product 2 / 2020-06-23 / 8.50 / 0.50
Product 2 / 2020-06-23 / 8.50 / Product 2 / 2020-06-22 / 8.00 / 0.50
Product 2 / 2020-06-22 / 8.00 / Product 2 / 2020-06-21 / 7.00 / 1.00
Product 2 / 2020-06-21 / 7.00 / Product 2 / 2020-06-20 / 6.50 / 0.50
如能就我如何创建此查询提供任何帮助,我们将不胜感激。
您可以使用 window 函数和一些过滤:
select *
from (
select
t.*,
lag(date) over(partition by productID order by date) lag_date,
lag(value) over(partition by productID order by date) lag_value,
value - lag(value) over(partition by productID order by date) change
from mytable t
where value is not null
) t
where lag_value is not null