DB2 SQL SELECT 加入的前 1 组
DB2 SQL SELECT top 1 group with join
我正在连接到 DB2 数据库并希望使用 Max(PO180M1.POORDT) 或 PO180M2.PHPPN (PARTNO) 的 TOP 1 分组。我该怎么做?我想我一直在接近但没有让它发挥作用。
SELECT PO180M2.PHPPN AS PartNo, (PO180M2.PHVNPD || ' ' || PO180M2.PHVNP2) AS PartDesc,
PO180M1.POORDT AS OrderDate, PO180M2.PHUNCT AS UnitCost
FROM PO180M1, PO180M2
WHERE PO180M1.POORNO = PO180M2.PHORNO
ORDER BY PartNo, OrderDate DESC
差不多明白了。对于任何聚合,Max()
、Min()
、Avg()
、Count()
、Sum()
,需要一个 GROUP BY
子句列出 "level"通常是指示字段(名称、类别、类型)的列。
此外,您将遗漏一个您试图 运行 聚合的级别列,这里是 POORDT
。最后,您将无法 ORDER BY
非常聚合的字段,而只能列出组字段。
SELECT PO180M2.PHPPN AS PartNo, (PO180M2.PHVNPD || ' ' || PO180M2.PHVNP2) AS PartDesc,
PO180M2.PHUNCT AS UnitCost, Max(PO180M1.POORDT) As MaxPOORDT
FROM PO180M1
INNER JOIN PO180M2 ON PO180M1.POORNO = PO180M2.PHORNO
GROUP BY PO180M2.PHPPN, (PO180M2.PHVNPD || ' ' || PO180M2.PHVNP2), PO180M2.PHUNCT
ORDER BY PartNo
顺便说一下,我注意到您使用了 table 的旧语法,在 FROM
子句中使用 WHERE
子句连接列表 table。我将其更改为带有 ON
的 INNER JOIN
,我认为它符合 DB2。
我正在连接到 DB2 数据库并希望使用 Max(PO180M1.POORDT) 或 PO180M2.PHPPN (PARTNO) 的 TOP 1 分组。我该怎么做?我想我一直在接近但没有让它发挥作用。
SELECT PO180M2.PHPPN AS PartNo, (PO180M2.PHVNPD || ' ' || PO180M2.PHVNP2) AS PartDesc,
PO180M1.POORDT AS OrderDate, PO180M2.PHUNCT AS UnitCost
FROM PO180M1, PO180M2
WHERE PO180M1.POORNO = PO180M2.PHORNO
ORDER BY PartNo, OrderDate DESC
差不多明白了。对于任何聚合,Max()
、Min()
、Avg()
、Count()
、Sum()
,需要一个 GROUP BY
子句列出 "level"通常是指示字段(名称、类别、类型)的列。
此外,您将遗漏一个您试图 运行 聚合的级别列,这里是 POORDT
。最后,您将无法 ORDER BY
非常聚合的字段,而只能列出组字段。
SELECT PO180M2.PHPPN AS PartNo, (PO180M2.PHVNPD || ' ' || PO180M2.PHVNP2) AS PartDesc,
PO180M2.PHUNCT AS UnitCost, Max(PO180M1.POORDT) As MaxPOORDT
FROM PO180M1
INNER JOIN PO180M2 ON PO180M1.POORNO = PO180M2.PHORNO
GROUP BY PO180M2.PHPPN, (PO180M2.PHVNPD || ' ' || PO180M2.PHVNP2), PO180M2.PHUNCT
ORDER BY PartNo
顺便说一下,我注意到您使用了 table 的旧语法,在 FROM
子句中使用 WHERE
子句连接列表 table。我将其更改为带有 ON
的 INNER JOIN
,我认为它符合 DB2。