Servidor Sql: cómo usar una function agregada como MAX en una cláusula WHERE

Quiero get el máximo valor para este logging. Por favor, ayúdame:

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 

Podría usar una sub consulta …

 WHERE t1.field3 = (SELECT MAX(st1.field3) FROM table1 AS st1) 

Pero en realidad movería esto fuera de la cláusula where y en la statement join, como AND para la cláusula ON.

Como habrás notado, la cláusula WHERE no te permite usar agregados en ella. Para eso es la cláusula HAVING .

 HAVING t1.field3=MAX(t1.field3) 

La forma correcta de usar max en la cláusula having es realizar primero una unión automática:

 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) 

La siguiente es la forma en que se uniría a una subconsulta:

 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) 

Asegúrese de crear un solo set de datos antes de usar un agregado al tratar con una combinación de varias tablas:

 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 

Versión de sub consulta:

 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) 

sí, necesitas usar una cláusula having después de la cláusula Group by, donde el único filter es la información sobre parameters simples, pero group a seguido de una statement Having es la idea de agrupar los datos y filtrarlos sobre la base de algún agregado function……

Pero sigue dando un post de error en Query Builder. Estoy usando 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)) 

Reemplacé DONDE con TENER como dijo @powerlord. Pero sigue mostrando un error.

Error al analizar la consulta [Número de línea de Token = 1, Offset de línea Token = 371, Token en error = SELECT]