このレコードの最大値を取得します。私を助けてください:
SELECT rest.field1
FROM mastertable AS m
INNER JOIN (
SELECT t1.field1 field1,
t2.field2
FROM table1 AS T1
INNER JOIN table2 AS t2 ON t2.field = t1.field
WHERE t1.field3=MAX(t1.field3)
-- ^^^^^^^^^^^^^^ Help me here.
) AS rest ON rest.field1 = m.field
サブクエリを使用できます...
WHERE t1.field3 = (SELECT MAX(st1.field3) FROM table1 AS st1)
しかし、実際には、これをON句のANDとして、where句からjoinステートメントに移動します。
お気づきのとおり、WHERE
句では、その中で集計を使用することはできません。それがHAVING
句の目的です。
HAVING t1.field3=MAX(t1.field3)
Having句でmaxを使用する正しい方法は、最初に自己結合を実行することです。
select t1.a, t1.b, t1.c
from table1 t1
join table1 t1_max
on t1.id = t1_max.id
group by t1.a, t1.b, t1.c
having t1.date = max(t1_max.date)
以下は、サブクエリとの結合方法です。
select t1.a, t1.b, t1.c
from table1 t1
where t1.date = (select max(t1_max.date)
from table1 t1_max
where t1.id = t1_max.id)
マルチテーブル結合を処理する場合、集約を使用する前に、必ず単一のデータセットを作成してください。
select t1.id, t1.date, t1.a, t1.b, t1.c
into #dataset
from table1 t1
join table2 t2
on t1.id = t2.id
join table2 t3
on t1.id = t3.id
select a, b, c
from #dataset d
join #dataset d_max
on d.id = d_max.id
having d.date = max(d_max.date)
group by a, b, c
サブクエリのバージョン:
select t1.id, t1.date, t1.a, t1.b, t1.c
into #dataset
from table1 t1
join table2 t2
on t1.id = t2.id
join table2 t3
on t1.id = t3.id
select a, b, c
from #dataset d
where d.date = (select max(d_max.date)
from #dataset d_max
where d.id = d_max.id)
SELECT rest.field1
FROM mastertable as m
INNER JOIN table1 at t1 on t1.field1 = m.field
INNER JOIN table2 at t2 on t2.field = t1.field
WHERE t1.field3 = (SELECT MAX(field3) FROM table1)
はい、単純なパラメーターでデータをフィルター処理するだけであるため、Group by句の後にhaving句を使用する必要がありますが、group byに続いてHaveingステートメントを使用すると、データをグループ化し、集計に基づいてフィルター処理することができます関数......
ただし、クエリビルダではエラーメッセージが表示されます。 SqlServerCe 2008を使用しています。
SELECT Products_Master.ProductName, Order_Products.Quantity, Order_Details.TotalTax, Order_Products.Cost, Order_Details.Discount,
Order_Details.TotalPrice
FROM Order_Products INNER JOIN
Order_Details ON Order_Details.OrderID = Order_Products.OrderID INNER JOIN
Products_Master ON Products_Master.ProductCode = Order_Products.ProductCode
HAVING (Order_Details.OrderID = (SELECT MAX(OrderID) AS Expr1 FROM Order_Details AS mx1))
@powerlordによると、WHEREをHAVINGに置き換えました。しかし、まだエラーが表示されます。
クエリの解析エラー。 [トークン行番号= 1、トークン行オフセット= 371、エラーのトークン= SELECT]