[SQL] SQL 서버하십시오 WHERE 절에 MAX 같은 집계 함수를 사용하는 방법
SQLSQL 서버하십시오 WHERE 절에 MAX 같은 집계 함수를 사용하는 방법
나는이 레코드의 최대 값을 얻을합니다. 제발 도와주세요 :
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
해결법
-
==============================
1.당신은 하위 쿼리를 사용할 수 있습니다 ...
당신은 하위 쿼리를 사용할 수 있습니다 ...
WHERE t1.field3 = (SELECT MAX(st1.field3) FROM table1 AS st1)
하지만 실제로 어디 조항이 밖으로 이동 것하고는 같이 AND ON 절에 대한 문을 가입으로.
-
==============================
2.당신이 눈치 챘을 때, WHERE 절은 당신이 그것에 집계를 사용하는 것을 허용하지 않습니다. 즉, HAVING 절가 무엇인지입니다.
당신이 눈치 챘을 때, WHERE 절은 당신이 그것에 집계를 사용하는 것을 허용하지 않습니다. 즉, HAVING 절가 무엇인지입니다.
HAVING t1.field3=MAX(t1.field3)
-
==============================
3.HAVING 절에서 최대 사용하는 올바른 방법은 가입 먼저 자기를 수행하는 것입니다 :
HAVING 절에서 최대 사용하는 올바른 방법은 가입 먼저 자기를 수행하는 것입니다 :
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)
-
==============================
4.
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)
-
==============================
5.예는 GROUP BY 절 후 가진 절을 사용해야합니다, 간단한 변수에 대한 데이터를 필터링 단지되는 위치로서 하지만 데 문 다음에 의해 그룹은 그룹에 아이디어를 일부 집계 함수에 기초 데이터 및 필터를 것입니다 ......
예는 GROUP BY 절 후 가진 절을 사용해야합니다, 간단한 변수에 대한 데이터를 필터링 단지되는 위치로서 하지만 데 문 다음에 의해 그룹은 그룹에 아이디어를 일부 집계 함수에 기초 데이터 및 필터를 것입니다 ......
-
==============================
6.하지만 여전히 쿼리 빌더에서 오류 메시지를 제공합니다. 나는 SqlServerCe 2008을 사용하고 있습니다.
하지만 여전히 쿼리 빌더에서 오류 메시지를 제공합니다. 나는 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))
HAVING와 같은 @powerlord 말했다 어디에서 교체. 하지만 여전히 오류를 표시합니다.
쿼리를 구문 분석 오류가 발생했습니다. [토큰 행 번호 = 1, 토큰 라인 오류 = SELECT = 371에서, 토큰 오프셋]
from https://stackoverflow.com/questions/1475589/sql-server-how-to-use-an-aggregate-function-like-max-in-a-where-clause by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 는 SQL 서버에서 MySQL을 ON DUPLICATE KEY UPDATE의 등가 (0) | 2020.06.09 |
---|---|
[SQL] 나는 크로스 탭 쿼리를 만드는 방법을 알 필요가 (0) | 2020.06.08 |
[SQL] MySQL은, 오류 126 : 테이블에 대한 잘못된 키 파일 (0) | 2020.06.08 |
[SQL] NOT이 존재하는 INSERT 값 (0) | 2020.06.08 |
[SQL] 어떤 SQL을 선택 기호를 수행 || 평균? (0) | 2020.06.08 |