2016-08-12 5 views
0

주문 날짜가 포함 된 테이블 주문이 있습니다.SQL : 효율적으로 마지막 레코드를 얻으십시오.

WarehouseId | OrderId | ItemId | OrderDate 
------------------------------------------- 
      1 |  1 |  1 | 2016-08-01 
      1 |  2 |  2 | 2016-08-02 
      1 |  3 |  5 | 2016-08-10 
      2 |  1 |  1 | 2016-08-05 
      3 |  1 |  6 | 2016-08-06 

(테이블이 단순화되고에만 표시 필수 항목)

어떻게 효율적으로 특정 창고의 마지막 순서를 선택? 나는 현재 나는 할 : I 정렬 수행하여, 특정웨어 하우스 만 (또는 그 이상)의 주문을 가지고 있고, 너무 느린 것 첫 번째 레코드를 선택하면

SELECT TOP 1 * FROM tblOrder WHERE WarehouseId = 1 ORDER BY OrderDate DESC 

내 관심사이다 (I 생각?).

마지막 주문 레코드를 선택하는 더 효율적인 방법이 있습니까? 당신이 그것에 많이려고하는 경우에

감사

+0

동점 일 경우 예상되는 결과는 무엇입니까? (즉 마지막 두 날짜가 같은 두 행.) – jarlh

+0

당신의 접근 방식은 매우 비싸지 않고 테이블에 인덱스 (WarehouseID, OrderDate)가있는 경우 잘 작동해야합니다. –

+0

많은 일을하는 경우 orderdate 필드에 인덱스를 설정하면 작업 속도가 빨라집니다 (하지만이 테이블에 대한 다른 쿼리에 영향을 줄 수 있음을 알고 있어야합니다. 복잡한 주제이므로 DBA!). 그렇지 않으면 위 쿼리 작성자가 같은 날짜에 대해 걱정하지 않는 한 쿼리가 괜찮습니다. – ADyson

답변

1

, 당신은 OrderDate 필드에 인덱스를 설정하는 것이 좋습니다 수 있습니다. 그렇게하면 작업 속도가 빨라집니다 (그러나이 테이블에 대한 다른 쿼리에 영향을 미칠 수 있으므로 복잡한 주제이므로 DBA와상의하십시오!).

그렇지 않으면 동일한 날짜가있을 때 주문에 대해 걱정하지 않는 한 질문에 만족하지 않습니다.이 경우 OrderID와 같이 주문할 보조 입력란을 결정해야합니다. 코멘트).

+0

복합 기본 키인 OrderId를 사용하고 있습니다. 괜찮을 것 같네요? – Sam

+0

나는 그렇게 생각했다. – ADyson

관련 문제