2014-12-27 3 views
1

내 질문에 대한 대답을 검색했지만 찾지 못했습니다.테이블에서 마지막 N 개의 레코드 검색

내가

  • ID (기본 키 일련 번호)
  • CLIENT_ID 구성 테이블 주문이 : 각 클라이언트
위해서는 날짜 :
  • 일 (독특한) 각 클라이언트를 식별

    단일보기에서 각 클라이언트의 마지막 N 주문 날짜를 검색하고 싶습니다.

    나는 SELECT TOP N date FROM orders WHERE client = 'xx' ORDER DESC을 사용하고 다른 값으로는 UNION을 사용할 수 있습니다. 문제는 클라이언트 기반의 변경으로 인해 명세서에 수정이 필요하며 큰 클라이언트 기반에서는 UNION 문이 실용적이지 않다는 것입니다.

    추가 요구 사항으로 Access SQL에서 작동해야합니다.

  • 답변

    1

    1 단계 : 모든 행에 대해 클라이언트 당 날짜 별 순위를 산출하는 쿼리를 생성하십시오.

    , 당신의 결과가 있어야한다 : 액세스 SQL은 SQL 서버와 같은 ROW_NUMBER() OVER (...)을 가지고 있지 않기 때문에, 당신은 다음과 같은 질문에 설명 된 기술을 사용하여이 작업을 시뮬레이션 할 수 있습니다 다음과 같이

    id client_id date  rank 
    ---------------------------------- 
         1  2014-12-01 7 
         1  2014-12-02 6 
         1  2014-12-05 5 
         1  2014-12-07 4 
         1  2014-12-11 3 
         1  2014-12-14 2 
         1  2014-12-15 1 
         2  2014-12-01 2 
         2  2014-12-02 1 
         ... 
    

    단계 2 : 서브 쿼리 1 단계의 결과를 사용하여 결과를 필터링되도록 레코드 만 012,353을 가진이 리턴됩니다.

    +0

    같은 것을 제안하려고 했으니 득표 해주십시오. –

    1

    나는 다음은 MS Access에서 작동합니다 생각 : MS 액세스와

    select t.* 
    from table as t 
    where t.date in (select top N t2.date 
           from table as t2 
           where t2.client_id = t.client_id 
           order by t2.date desc 
           ); 
    

    하나의 문제가 관계가있는 경우 top N 이상 N 레코드를 검색하는 것입니다. 정확히 "N"을 원하면 하위 쿼리에서 order by date, id을 사용할 수 있습니다.

    +0

    좋은 생각 이었지만,'date'가 아니라'id'에 대한 비교를해야한다고 생각합니다. 3 명의 고객이 '2014-12-01'에 주문하는 경우를 생각해보십시오. 그러나 2 명에 대해서만 관련성이 있습니다 (즉, 지난 5 회 주문 이내). 귀하의 쿼리는 세 가지 레코드를 모두 반환합니다. – Heinzi

    +0

    @Heinzi. . . 나는 당신의 의견을 이해하지 못합니다. OP는 매우 명확합니다. "마지막 N 주문은 각 고객에게 달려 있습니다". 물론, OP가 "last N order dates"의 정의에서'date'가 아니라'id'를 의미한다면, 그는 물론 그 필드를 사용할 수 있습니다. 고객의 수는 '상단'과 '주문'의 상호 작용에 의해 처리됩니다. –

    +0

    아, 이해합니다. 당신은 당연합니다. 나는 각 client_id에 대한 N 개의 항목이있는 "client_id, date"표와 같은 "각 클라이언트 *의 마지막 N 주문 날짜 *"를 원한다고 생각했습니다. 물론 그가 제공하는 UNION 예제는 "모든 * 클라이언트 *에 대한 마지막 5 개의 주문 날짜 내에있는 모든 날짜"가됩니다. SQL은이 문제를 완벽하게 해결합니다. 나는 여전히 그가 실제로 첫 번째 해석을 원할지도 모른다고 믿는다. – Heinzi

    관련 문제