在mysql中使用最新的“effective_date”返回行
问题描述:
通过查看其他示例无法连接点。在写这篇文章的时候寻找一些帮助,这样它就会为每个9DVN取回最新的条目:也就是说,将最后一个生效日期的一行数据拉回来。在mysql中使用最新的“effective_date”返回行
SELECT b.vndr_name AS Supplier,
a.VENDOR_NBR*1000 + a.VENDOR_DEPT_NBR*10 + a.VENDOR_SEQ_NBR AS "9DVN",
a.VENDOR_NBR AS "6DVN",a.VENDOR_DEPT_NBR AS "Dept",
a.VENDOR_SEQ_NBR AS "Seq" ,a.FREIGHT_FACTOR_PCT AS "Rate",
a.Effective_Date AS "Effect Date",
a.LAST_CHANGE_USERID AS "By",
COUNT(a.DC_NBR) AS "DC Count"
FROM MainTable.DC_FRT_FCTR a
INNER JOIN SecondaryTable ON b.vndr_nbr = a.vendor_nbr
ORDER BY a.Effective_Date DESC
GROUP BY B.vndr_name,
a.VENDOR_NBR,
a.VENDOR_DEPT_NBR,
a.VENDOR_SEQ_NBR,
a.FREIGHT_FACTOR_PCT,
Effective_Date,
a.LAST_CHANGE_USERID
答
这是一种常见的查询模式:查找与特定列的极值相关联的详细信息行。
您需要一个子查询来查找每个供应商的极端值 - 在您的案例中是最新生效日期。像这样:
SELECT MAX(Effective_Date) Effective_Date,
VENDOR_NBR*1000 + VENDOR_DEPT_NBR*10 + VENDOR_SEQ_NBR "9DVN"
FROM DC_FRT_FCTR
GROUP BY VENDOR_NBR*1000 + VENDOR_DEPT_NBR*10 + VENDOR_SEQ_NBR
你应该测试这个子查询,以确保它产生理智的结果。
然后,您需要将它加入到您的查询的其余部分,如极端值。
SELECT b.vndr_name AS Supplier,
a.VENDOR_NBR*1000 + a.VENDOR_DEPT_NBR*10 + a.VENDOR_SEQ_NBR AS "9DVN",
...etc...
COUNT(a.DC_NBR) AS "DC Count"
FROM MainTable.DC_FRT_FCTR a
JOIN (
SELECT MAX(Effective_Date) Effective_Date,
VENDOR_NBR*1000 + VENDOR_DEPT_NBR*10 + VENDOR_SEQ_NBR "9DVN"
FROM DC_FRT_FCTR
GROUP BY VENDOR_NBR*1000 + VENDOR_DEPT_NBR*10 + VENDOR_SEQ_NBR
) latest
ON latest.9DVN = a.VENDOR_NBR*1000 + a.VENDOR_DEPT_NBR*10 + a.VENDOR_SEQ_NBR
AND latest.Effective_Date = a.Effective_Date
JOIN SecondaryTable b
ON b.vndr_nbr = a.vendor_nbr
ORDER BY a.Effective_Date DESC
GROUP BY B.vndr_name,
... etc ...
+0
谢谢!我会尝试并提供更新。 – Russell
您的'DC_FRT_FCTR'表是否有一列标识不同的'9DVN'值? –
这个问题已经在[tag:greatest-n-per-group]标签下回答了数百次。 –
不,它不。 9dvn是三个字段的连接 – Russell