2017-03-09 49 views
0

在我们的查询工具(使用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 
+0

您可以共享表的创建脚本以及一些示例数据的插入语句吗? –

+0

最大inv_shipment_date_key在整个表中,或对于一组特定的Division_Key?提供一些示例数据和预期输出 – Utsav

回答

0

如果我正确理解你的问题,你需要这样的人。如果在最后一行删除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' 
0

我假设你想要产品的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 
相关问题