SQL Max函数检索一个记录与其他表中的相关字段
问题描述:
在我们的查询工具(使用ODBC)4.1 我想获得最大inv_shipment_date和相应的inv_billed_weight,product_ID和division_CD。 我有4个表格,我必须从(1必须用于加入其他)获取数据。 我无法编写SQL将结果下载到显示最大出货日期的一行。SQL Max函数检索一个记录与其他表中的相关字段
表和所需的字段:
FOS: Package_key Inv_Shipment_Date Inv_Billed_Weight Division_Key
FIF: Package_key Product_key
PD: Product_key PRODUCT_ID
DD: Division_Key Division_CD
最终结果,我在一个表 MAX(inv_shipment_date) Inv_Billed_Weight PRODUCT_ID Division_CD
我写的是导致空白数据(我知道通过寻找希望在数据中最大出货日期实际上是20170112,计费重量是20,部门是DOL,产品ID是03-01984-001)
我在做什么错?谢谢你的帮助smile.gif
SELECT
max(fos.inv_shipment_date_key),
dd.division_cd,
pd.product_id,
max(fos.inv_billed_weight)
FROM DCDM.FREIGHT_OUT_SUMMARY fos,
(select max(inv_shipment_date_key) as Maxinvdate, inv_billed_weight
from dcdm.freight_out_summary
group by inv_billed_weight) maxdate,
dcdm.division_dim dd,
dcdm.product_dim pd,
dcdm.freight_invoice_fact fif
where fos.inv_billed_weight = maxdate.inv_billed_weight
and fos.inv_shipment_date_key = maxdate.maxinvdate
and fos.package_key = fif.package_key
and fif.product_key = pd.product_key
and fos.division_key = dd.division_key
and pd.product_id = '03-01984-001'
group by
fos.inv_shipment_date_key,
dd.division_cd,
pd.product_id,
fos.inv_billed_weight
答
如果我正确理解你的问题,你需要这样的人。如果在最后一行删除AND
条件,则会得到所有product id
的结果。我建议你删除最后的AND
条件,然后运行它,看看你是否得到期望的结果。但没有样本数据,这真的很难猜测。
SELECT *
FROM
(SELECT Package_key,
Inv_Billed_Weight,
Division_Key,
row_Number() over (partition BY Division_Key
ORDER BY Inv_Shipment_Date DESC) AS rn
FROM DCDM.FREIGHT_OUT_SUMMARY) fos
INNER JOIN dcdm.division_dim dd
ON fos.division_key = dd.division_key
INNER JOIN dcdm.freight_invoice_fact fif
ON fos.package_key = fif.package_key
INNER JOIN dcdm.product_dim pd
ON fif.product_key = pd.product_key
WHERE fos.rn=1
AND pd.product_id = '03-01984-001'
答
我假设你想要产品的MAX出货日期,是否正确?如果是这样,我建议最初在这里使用子查询,然后加入其他表(或者你可以先加入,但似乎没有必要)。当然,这取决于你使用的标识符 - 如果你有一个“货运ID”,这将是理想的。 例如:
select
Max(table1.Inv_shipment_date) over (partition by table2.product_ID) as max_shipment_date,
table1.SHIPMENT_ID,
table2.product_Id,
table3.division_Cd,
table4.inv_billed_weight
from
(select
SHIPMENT_ID,
inv_shipment_date
from table 1) as table1
left join
(select
SHIPMENT_ID,
product_ID
from table 2) as table2
on table 1.SHIPMENT_ID = table2.SHIPMENT_ID
left join
(select
SHIPMENT_ID,
division_Cd
from table 3) as table3
on table 1.SHIPMENT_ID = table3.SHIPMENT_ID
left join
(select
SHIPMENT_ID,
inv_billed_weight
from table 4) as table4
on table 1.SHIPMENT_ID = table4.SHIPMENT_ID
您可以共享表的创建脚本以及一些示例数据的插入语句吗? –
最大inv_shipment_date_key在整个表中,或对于一组特定的Division_Key?提供一些示例数据和预期输出 – Utsav