복붙노트

[SQL] 가장 최근의 날짜를 기준으로 SQL 선택 행

SQL

가장 최근의 날짜를 기준으로 SQL 선택 행

다음 쿼리 결과를 사용하여, 나는 ChargeId 및 ChargeType가 고유 가장 최근의 항목을 찾고 있어요.

select chargeId, chargeType, serviceMonth from invoice

    CHARGEID    CHARGETYPE  SERVICEMONTH
1   101     R       8/1/2008
2   161     N       2/1/2008
3   101     R       2/1/2008
4   101     R       3/1/2008
5   101     R       4/1/2008
6   101     R       5/1/2008
7   101     R       6/1/2008
8   101     R       7/1/2008

원하는 :

    CHARGEID    CHARGETYPE  SERVICEMONTH
1   101     R       8/1/2008
2   161     N       2/1/2008

해결법

  1. ==============================

    1.당신은 유형과 ID로 그룹 항목에 GROUP BY를 사용할 수 있습니다. 그럼 당신은 최신 서비스 월 얻기 위해 MAX () 집계 함수를 사용할 수 있습니다. ChargeId, ChargeType 및 MostRecentServiceMonth 가진 반환 아래의 결과 집합

    당신은 유형과 ID로 그룹 항목에 GROUP BY를 사용할 수 있습니다. 그럼 당신은 최신 서비스 월 얻기 위해 MAX () 집계 함수를 사용할 수 있습니다. ChargeId, ChargeType 및 MostRecentServiceMonth 가진 반환 아래의 결과 집합

    SELECT
      CHARGEID,
      CHARGETYPE,
      MAX(SERVICEMONTH) AS "MostRecentServiceMonth"
    FROM INVOICE
    GROUP BY CHARGEID, CHARGETYPE
    
  2. ==============================

    2.이되지 않도록 요청자는 요청했지만 그것은 "가장 최근의 날짜 별 SQL 선택 행"에 대한 답이 무엇인지.

    이되지 않도록 요청자는 요청했지만 그것은 "가장 최근의 날짜 별 SQL 선택 행"에 대한 답이 무엇인지.

    http://wiki.lessthandot.com/index.php/Returning_The_Maximum_Value_For_A_Row에서 수정

    SELECT t.chargeId, t.chargeType, t.serviceMonth FROM( 
        SELECT chargeId,MAX(serviceMonth) AS serviceMonth
        FROM invoice
        GROUP BY chargeId) x 
        JOIN invoice t ON x.chargeId =t.chargeId
        AND x.serviceMonth = t.serviceMonth
    
  3. ==============================

    3.

    SELECT chargeId, chargeType, MAX(serviceMonth) AS serviceMonth 
    FROM invoice
    GROUP BY chargeId, chargeType
    
  4. ==============================

    4.나는 개발자의 대부분이 큰 데이터에 대한 그것의 영향을 보지 않고 인라인 쿼리 사용을 참조하십시오.

    나는 개발자의 대부분이 큰 데이터에 대한 그것의 영향을 보지 않고 인라인 쿼리 사용을 참조하십시오.

    간단한 당신이를함으로써 달성 할 수있다 :

    select a.chargeId, a.chargeType, a.serviceMonth 
    from invoice a
    left outer join invoice b
    on a.chargeId=b.chargeId and a.serviceMonth <b.serviceMonth 
    where b.chargeId is null
    order by a.serviceMonth desc
    
  5. ==============================

    5.

    select to.chargeid,t0.po,i.chargetype from invoice i
    inner join
    (select chargeid,max(servicemonth)po from invoice 
    group by chargeid)t0
    on i.chargeid=t0.chargeid
    

    별개의 충전 ID가이 간단한 쿼리를 고려하여 약간의 성능 시간에 도움이 다른 chargetype의 combinations.Hope이있는 경우 위의 쿼리가 작동합니다 ...

  6. from https://stackoverflow.com/questions/189213/sql-selecting-rows-by-most-recent-date by cc-by-sa and MIT license