SQL 和 Group By of subquery max
SQL sum with Group By of subquery max
我有一份库存总帐摘要table。每个项目都有多行(项目更改的上个月期间)。我可以通过内部连接(select max(post-date)轻松获得总和(数量*价格)的当前值。所以估值是总和(qty)所以如果你想要估值假设 post 期间 202103,您将为每个零件号取最大(post-日期)并将其加在一起。对于 202103,它将是 PartA = 10、PartB 62 和 PartC 12。如果我想在 post 期间 202012 获取它,然后它将是 partA 14、PartB 62 和 PartC 12。基本上使用 PartA 的最大日期 202012。所以我有查询为整个 table 做最大(最新的)。但是我将如何处理它来获取每个时期的说法。我已经在子查询和其他所有内容中尝试了各种分组依据,但似乎无法完成这项工作。
part# qty post_date
PartA 23 202004
PartB 55 202004
PartC 12 202004
PartA 20 202006
PartB 62 202007
PartA 14 202012
PartA 12 202102
PartA 10 202103
select
sum(qty)
from
invtable inv
INNER JOIN (
Select
max(post_date)
from
invtable inv2
WHERE
post_date < 202103
GROUP BY
partnumber
) as t2
ON t2.partnuumber = inv.partnumber
and t2.post_date = inv.post_date
理想情况下我想要如下内容
202004 90
202006 87
202007 94
202012 88
202102 86
202103 84
如有任何帮助或建议,我们将不胜感激。如果我不能让它以这种方式输出,我想我可以在每个周期以编程方式 运行 并将其转储到 table 然后从那里拉。
我在 mysql
试过这个。下面是查询。请查看您是否可以根据您的数据库更改或使用它。
-- to find the sum of qty
select
finalT2.post_date, sum(finalT1.qty)
from
invtable finalT1
join
(
-- for each post date -> find the max of post date for each part
select
t2.post_date, t1.part, max(t1.post_date) as max_post_date
from
invtable t1
join
( -- group to find the list of post_date(s)
select
post_date
from
invtable
group by
post_date
) t2 on t1.post_date <= t2.post_date
group by
t2.post_date, t1.part
) finalT2 on finalT1.post_date = finalT2.max_post_date and finalT1.part = finalT2.part
group by
finalT2.post_date
输出图像 -
在Fiddle查询输出供参考:
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=18657bfb3ec0f8d4826a8c940ecc9941
我有一份库存总帐摘要table。每个项目都有多行(项目更改的上个月期间)。我可以通过内部连接(select max(post-date)轻松获得总和(数量*价格)的当前值。所以估值是总和(qty)所以如果你想要估值假设 post 期间 202103,您将为每个零件号取最大(post-日期)并将其加在一起。对于 202103,它将是 PartA = 10、PartB 62 和 PartC 12。如果我想在 post 期间 202012 获取它,然后它将是 partA 14、PartB 62 和 PartC 12。基本上使用 PartA 的最大日期 202012。所以我有查询为整个 table 做最大(最新的)。但是我将如何处理它来获取每个时期的说法。我已经在子查询和其他所有内容中尝试了各种分组依据,但似乎无法完成这项工作。
part# qty post_date
PartA 23 202004
PartB 55 202004
PartC 12 202004
PartA 20 202006
PartB 62 202007
PartA 14 202012
PartA 12 202102
PartA 10 202103
select
sum(qty)
from
invtable inv
INNER JOIN (
Select
max(post_date)
from
invtable inv2
WHERE
post_date < 202103
GROUP BY
partnumber
) as t2
ON t2.partnuumber = inv.partnumber
and t2.post_date = inv.post_date
理想情况下我想要如下内容
202004 90
202006 87
202007 94
202012 88
202102 86
202103 84
如有任何帮助或建议,我们将不胜感激。如果我不能让它以这种方式输出,我想我可以在每个周期以编程方式 运行 并将其转储到 table 然后从那里拉。
我在 mysql
试过这个。下面是查询。请查看您是否可以根据您的数据库更改或使用它。
-- to find the sum of qty
select
finalT2.post_date, sum(finalT1.qty)
from
invtable finalT1
join
(
-- for each post date -> find the max of post date for each part
select
t2.post_date, t1.part, max(t1.post_date) as max_post_date
from
invtable t1
join
( -- group to find the list of post_date(s)
select
post_date
from
invtable
group by
post_date
) t2 on t1.post_date <= t2.post_date
group by
t2.post_date, t1.part
) finalT2 on finalT1.post_date = finalT2.max_post_date and finalT1.part = finalT2.part
group by
finalT2.post_date
输出图像 -
在Fiddle查询输出供参考: https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=18657bfb3ec0f8d4826a8c940ecc9941