복붙노트

[SQL] SQL 서버하십시오 WHERE 절에 MAX 같은 집계 함수를 사용하는 방법

SQL

SQL 서버하십시오 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. ==============================

    1.당신은 하위 쿼리를 사용할 수 있습니다 ...

    당신은 하위 쿼리를 사용할 수 있습니다 ...

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

    하지만 실제로 어디 조항이 밖으로 이동 것하고는 같이 AND ON 절에 대한 문을 가입으로.

  2. ==============================

    2.당신이 눈치 챘을 때, WHERE 절은 당신이 그것에 집계를 사용하는 것을 허용하지 않습니다. 즉, HAVING 절가 무엇인지입니다.

    당신이 눈치 챘을 때, WHERE 절은 당신이 그것에 집계를 사용하는 것을 허용하지 않습니다. 즉, HAVING 절가 무엇인지입니다.

    HAVING t1.field3=MAX(t1.field3)
    
  3. ==============================

    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. ==============================

    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. ==============================

    5.예는 GROUP BY 절 후 가진 절을 사용해야합니다, 간단한 변수에 대한 데이터를 필터링 단지되는 위치로서 하지만 데 문 다음에 의해 그룹은 그룹에 아이디어를 일부 집계 함수에 기초 데이터 및 필터를 것입니다 ......

    예는 GROUP BY 절 후 가진 절을 사용해야합니다, 간단한 변수에 대한 데이터를 필터링 단지되는 위치로서 하지만 데 문 다음에 의해 그룹은 그룹에 아이디어를 일부 집계 함수에 기초 데이터 및 필터를 것입니다 ......

  6. ==============================

    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에서, 토큰 오프셋]

  7. 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