我有两张table:材料和存货。
我想得到所有材料的清单,如果有最新的库存,否则只有零。
表-材料
id | material |
==========================
1 |Lily - Blue
2 |Lily - Orange
3 |Lily - White
4 |Rose - Blue
5 |Rose - Orange
6 |Rose - White
表-库存
id | date | material | final_stock | entry_time |
=========================================================================
1 |2018-05-18 |Lily - Blue | 30 | 2018-05-18 09:06:48 |
2 |2018-05-18 |Lily - white| 10 | 2018-05-18 10:32:27 |
3 |2018-05-18 |Lily - Blue | 90 | 2018-05-18 15:30:31 |
我的问题:
select materials.material, max(inventory.final_stock) from materials left join
inventory on materials.material = inventory.material
输出
material | max(inventory.final_stock)|
========================================
Lily - Blue |90
需要输出>>
date | material | max(inventory.final_stock)|
======================================================
2018-05-18 | Lily - Blue |90
2018-05-18 | Lily - Orange|0
2018-05-18 | Lily - white |10
2018-05-18 | Rose - Blue |0
2018-05-18 | Rose - Orange|0
2018-05-18 | Rose - white |0
4条答案
按热度按时间dwthyt8l1#
试试这个;
wfveoks02#
只需添加一个子查询来填充缺少的元素,然后使用条件来填充空字段。下面的查询符合您问题中要求的条件。
请注意,在“实时”系统中,我不会仅将任何给定日期的最大值(最终库存)作为“最终库存”项。如果“entry\u time”应该是给定库存项目的最新条目,我将重新处理此查询以将其用作要引用的最新“inventory entry”。但这样做会带来一个问题,即是否允许系统中的某个人对库存条目进行回溯。
结果如下
如果允许您使用entry\u time字段,那么下面的查询是更好的解决方案。此查询也不再需要在外部查询中使用聚合。数据集的结果是相同的。
pxy2qtax3#
一种方法是相关子查询:
请注意
id
在表中,它可以用于外键关系。因此,inventory
应该有一个material_id
列,而不是material
列。aemubtdh4#
你也可以做
JOIN
与subquery
: