寻找内部联接的最大值 - SQL
Finding Max Value on Inner Join - SQL
我有一个临时表table,我们称它为#order,在这个table中有多个订单历史记录有变化。
我正在查看 or_chgn
列的最大值,其中在上面的示例中对订单文件进行了所有更改。
但是,当我编写查询时,得到的结果是错误的。
查询
SELECT *
FROM t.#ORDER
INNER JOIN (
SELECT OR_ORDN, max(OR_CHGN) OR_CHGN
FROM t.#ORDER
GROUP BY OR_ORDN
) d
ON t.OR_ORDN = d.OR_ORDN
and t.OR_CHGN = d.OR_CHGN
留言:
Msg 4104, Level 16, State 1, Line 16
The multi-part identifier "t.OR_ORDN" could not be bound.
Msg 4104, Level 16, State 1, Line 17
The multi-part identifier "t.OR_CHGN" could not be bound.
我在这里错过了什么?
您需要在外部查询的 from
子句中声明别名 t
,以便您可以在 JOIN
的 ON
子句中引用它.
因为看起来你的模式已经被称为 t
,我正在更改别名以使事情更清楚:
SELECT *
FROM t.#ORDER o --> here
INNER JOIN (
SELECT OR_ORDN, max(OR_CHGN) OR_CHGN
FROM t.#ORDER
GROUP BY OR_ORDN
) omax ON omax.OR_ORDN = o.OR_ORDN AND omax.OR_CHGN = o.OR_CHGN
解决此 greatest-n-per-group 问题的另一种 commonly-used 方法是使用相关子查询,它以某种方式简化了查询:
SELECT *
FROM t.#ORDER o
WHERE OR_CHGN = (
SELECT MAX(o1.OR_CHGN) FROM t.#ORDER o1 WHERE o1.OR_ORDN = o.OR_ORDN
)
此查询将利用 (OR_ORDN, OR_CHGN)
上的索引。
我有一个临时表table,我们称它为#order,在这个table中有多个订单历史记录有变化。
我正在查看 or_chgn
列的最大值,其中在上面的示例中对订单文件进行了所有更改。
但是,当我编写查询时,得到的结果是错误的。
查询
SELECT *
FROM t.#ORDER
INNER JOIN (
SELECT OR_ORDN, max(OR_CHGN) OR_CHGN
FROM t.#ORDER
GROUP BY OR_ORDN
) d
ON t.OR_ORDN = d.OR_ORDN
and t.OR_CHGN = d.OR_CHGN
留言:
Msg 4104, Level 16, State 1, Line 16 The multi-part identifier "t.OR_ORDN" could not be bound. Msg 4104, Level 16, State 1, Line 17 The multi-part identifier "t.OR_CHGN" could not be bound.
我在这里错过了什么?
您需要在外部查询的 from
子句中声明别名 t
,以便您可以在 JOIN
的 ON
子句中引用它.
因为看起来你的模式已经被称为 t
,我正在更改别名以使事情更清楚:
SELECT *
FROM t.#ORDER o --> here
INNER JOIN (
SELECT OR_ORDN, max(OR_CHGN) OR_CHGN
FROM t.#ORDER
GROUP BY OR_ORDN
) omax ON omax.OR_ORDN = o.OR_ORDN AND omax.OR_CHGN = o.OR_CHGN
解决此 greatest-n-per-group 问题的另一种 commonly-used 方法是使用相关子查询,它以某种方式简化了查询:
SELECT *
FROM t.#ORDER o
WHERE OR_CHGN = (
SELECT MAX(o1.OR_CHGN) FROM t.#ORDER o1 WHERE o1.OR_ORDN = o.OR_ORDN
)
此查询将利用 (OR_ORDN, OR_CHGN)
上的索引。