根据存储选择每个产品的最新余额(SQL)
我正在尝试根据storeid获取每个产品的最新余额。但我不知道为什么会得到重复的股票名称根据存储选择每个产品的最新余额(SQL),sql,postgresql,greatest-n-per-group,Sql,Postgresql,Greatest N Per Group,我正在尝试根据storeid获取每个产品的最新余额。但我不知道为什么会得到重复的股票名称sasi Sql查询 select stockname, balance,updatedat,storename,s1.productid,s1.storeid from stockmovement s1 inner join (select storeid, productid, max(updatedat) as maxdate from stockmovement
sasi
Sql查询
select stockname, balance,updatedat,storename,s1.productid,s1.storeid
from stockmovement s1
inner join (select storeid, productid, max(updatedat) as maxdate
from stockmovement
group by storeid,productid) s2
on s2.storeid = s1.storeid and s2.maxdate = s1.updatedat
使用行号()尝试下面的查询:
使用行号()尝试以下查询: 这是一个问题,在Postgres中使用以下工具可以有效地解决:
select distinct on (storeid, productid) *
from stockmovement
order by storeid, productid, updatedat desc
这通常比使用窗口函数的等效解决方案要快。这是一个问题,在Postgres中使用以下函数可以有效地解决:
select distinct on (storeid, productid) *
from stockmovement
order by storeid, productid, updatedat desc
这通常比使用窗口函数的等效解决方案快。这肯定是最明智的答案。:)这个答案无效。我只想选择特定的列,而不是全部(*)@sy523:well,然后用您想要的列替换
*
。我有一些问题,如产品:A余额:10日期:2021-03-18 09:01:00存储ID:1,产品:B余额:6日期:2021-03-18 09:01:00存储ID:1和产品:A余额:12日期:2021-03-18 10:01:00存储ID:1。当前使用的查询结果是product:A余额:10和product:B余额:6,但预期结果是product:A余额:12和product:B余额:6@a_horse_with_no_nameIt这肯定是最聪明的答案这个答案无效。我只想选择特定的列,而不是全部(*)@sy523:well,然后用您想要的列替换*
。我有一些问题,如产品:A余额:10日期:2021-03-18 09:01:00存储ID:1,产品:B余额:6日期:2021-03-18 09:01:00存储ID:1和产品:A余额:12日期:2021-03-18 10:01:00存储ID:1。当前使用的查询结果是product:A余额:10和product:B余额:6,但预期结果是product:A余额:12和product:B余额:6@a_horse_with_no_namei有一些问题,如产品:A余额:10日期:2021-03-18 09:01:00 storeid:1,产品:B余额:6日期:2021-03-18 09:01:00存储ID:1和产品:A余额:12日期:2021-03-18 10:01:00存储ID:1。目前使用您的查询结果是product:A Balance:10和product:B Balance:6,但预期结果是product:A Balance:12和product:B Balance:6如果您需要最新的余额,我已修改了我的答案。非常欢迎您。如果您在这个问题上遇到任何困难,请告诉我。最好的祝愿。如果bupdatedat是datetime类型的字段,queery应该可以工作。那太好了。我有一些问题,比如产品:A余额:10日期:2021-03-18 09:01:00存储ID:1,产品:B余额:6日期:2021-03-18 09:01:00存储ID:1和产品:A余额:12日期:2021-03-18 10:01:00存储ID:1。目前使用您的查询结果是product:A Balance:10和product:B Balance:6,但预期结果是product:A Balance:12和product:B Balance:6如果您需要最新的余额,我已修改了我的答案。非常欢迎您。如果您在这个问题上遇到任何困难,请告诉我。最好的祝愿。如果bupdatedat是datetime类型的字段,queery应该可以工作。那太好了。最美好的祝福。
select distinct on (storeid, productid) *
from stockmovement
order by storeid, productid, updatedat desc