【问题标题】:Selecting rows with MAX(Column value), DISTINCT by another column in SQL在 SQL 中选择具有 MAX(列值)、DISTINCT 的行的另一列
【发布时间】:2016-04-15 16:12:31
【问题描述】:

我有两张桌子遇到了困难。 OrderHed 和 UD11。 OrderHed 的 OrderNum=70960 有 1 个值,但 UD11 有 70960 的 4 条记录。

我正在尝试将 UD11.Key5 的最大值作为不同的记录返回 - 我做错了什么?

谢谢!

    SELECT TOP (100) PERCENT OrderHed.OrderNum,
    OrderHed.OpenOrder,
    OrderHed.OrderDate,
    OrderRel.Plant,
    OrderHed.EntryPerson,
    OrderHed.Company,
    Erp.Customer.CustID,
    Erp.Customer.NAME,
    Erp.InvcDtl.InvoiceNum,
    SUM(OrderDtl.ExtPriceDtl) AS Expr1,
    OrderHed.PONum,
    Ice.UD11.Key1,
    Ice.UD11.Key2,
    Ice.UD11.Key3,
    Ice.UD11.Key4,
    MAX(Ice.UD11.Key5) AS Expr2,
    Ice.UD11.Character01,
    Ice.UD11.Number01,
    Ice.UD11.Date01,
    Ice.UD11.Date02,
    Ice.UD11.Date03,
    Ice.UD11.ShortChar01,
    Ice.UD11.ShortChar02,
    Ice.UD11.ShortChar03,
    Ice.UD11.ShortChar04,
    Ice.UD11.ShortChar05,
    OrderHed.OrderComment
FROM Erp.Customer
RIGHT JOIN Ice.UD11
RIGHT JOIN Erp.OrderHed AS OrderHed ON Ice.UD11.Company = OrderHed.Company
    AND Ice.UD11.Key1 = OrderHed.OrderNum
LEFT JOIN Erp.OrderRel AS OrderRel
RIGHT JOIN Erp.OrderDtl AS OrderDtl ON OrderRel.Company = OrderDtl.Company
    AND OrderRel.OrderNum = OrderDtl.OrderNum
    AND OrderRel.OrderLine = OrderDtl.OrderLine ON OrderHed.Company = OrderDtl.Company
    AND OrderHed.OrderNum = OrderDtl.OrderNum ON Erp.Customer.Company = OrderHed.Company
    AND Erp.Customer.CustNum = OrderHed.CustNum LEFT JOIN Erp.InvcDtl RIGHT JOIN Erp.ShipDtl ON Erp.InvcDtl.Company = Erp.ShipDtl.Company
    AND Erp.InvcDtl.OrderNum = Erp.ShipDtl.OrderNum
    AND Erp.InvcDtl.OrderLine = Erp.ShipDtl.OrderLine
    AND Erp.InvcDtl.OrderRelNum = Erp.ShipDtl.OrderRelNum ON OrderRel.Company = Erp.ShipDtl.Company
    AND OrderRel.OrderNum = Erp.ShipDtl.OrderNum
    AND OrderRel.OrderLine = Erp.ShipDtl.OrderLine
    AND OrderRel.OrderRelNum = Erp.ShipDtl.OrderRelNum GROUP BY OrderHed.OrderNum,
    OrderHed.OrderDate,
    OrderRel.Plant,
    OrderHed.EntryPerson,
    OrderHed.Company,
    OrderHed.OpenOrder,
    Erp.Customer.CustID,
    Erp.Customer.NAME,
    Erp.InvcDtl.InvoiceNum,
    OrderHed.PONum,
    Ice.UD11.Key1,
    Ice.UD11.Key2,
    Ice.UD11.Key3,
    Ice.UD11.Key4,
    Ice.UD11.Character01,
    Ice.UD11.Number01,
    Ice.UD11.Date01,
    Ice.UD11.Date02,
    Ice.UD11.Date03,
    Ice.UD11.ShortChar01,
    Ice.UD11.ShortChar02,
    Ice.UD11.ShortChar03,
    Ice.UD11.ShortChar04,
    Ice.UD11.ShortChar05,
    OrderHed.OrderComment HAVING (OrderHed.Company = N'011')
    AND (Erp.InvcDtl.InvoiceNum IS NULL)
    AND (OrderHed.OrderNum = 70960)

【问题讨论】:

    标签: sql max distinct


    【解决方案1】:
    SELECT  *
    FROM    (
            SELECT  *,
                    ROW_NUMBER() OVER (PARTITION BY OrderNum ORDER BY key5 DESC) rn
            FROM    (... /* my huge query */) q
            ) q
    WHERE   rn = 1
    

    【讨论】:

    • 所以我想在我的 FROM 语句中添加另一个 SELECT 语句?
    • @Machzy: 是的,把你的整个查询放在括号里,别忘了给它起别名(q 在结束括号之后)
    猜你喜欢
    • 1970-01-01
    • 2023-03-14
    • 2011-05-13
    • 1970-01-01
    • 2015-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-14
    相关资源
    最近更新 更多