2011-10-07 2 views
-2

날짜 범위가 특정 날짜 이전이지만 날짜 이후 인 경우이 쿼리 결과에서 제품 목록을 제외해야하는 복잡한 쿼리가 있습니다. 각 레코드에는 고유 한 날짜가 있지만 제외/포함 날짜는 고정되어 있습니다.SQL보기 - 날짜 범위 전에 레코드 제외

다른보기에서 제품 목록을 얻습니다.

내 SQL이 녹슬어있다. (나는 보통 Objective C를 많이 코딩한다.) 누군가이 쿼리를 작성하는 방법에 대한 아이디어를 알려 주실 수 있습니까?

샘플 쿼리 :

선택 AuthDate, 제품 ID, * ProductOrders에서 이

ProductOrders 테이블 I에서 온 제품의 목록을 제외 할 여기에, 모든 종류의 제품에 대한 주문을 잔뜩 포함 다른 뷰 (vwExcludeProducts)는 2011 년 9 월 1 일과 같은 특정 날짜 이전이지만 2011 년 9 월 1 일 이후 인 경우에만 포함됩니다.

vwExcludeProducts는 제외 될 제품 목록의 ProductId 만 반환하므로 필요한 것 같습니다. 이 뷰를 ProductOrders 테이블과 결합하고 l |

제품 ID : OOK 그것을 AuthDate는

ProductOrders 샘플 데이터 < 9월 1일 2011 년의 경우 설명 | AuthDate 1 1 제품 설명 2011-08-30 2 2 제품 설명 2011-08-30 3 제품 설명 3 2011-08-30 4 제품 설명 2011-08-30 4 5 5 제품 설명 2011-09-01

이 경우 vwExcludeProducts 뷰는 ProductId 4를 숨기고 나머지를 표시하도록 ProductId 4를 숨기려고합니다. vwExcludeProducts에도 ProductId 5가 포함 된 경우 이후/include 1 2011 년 9 월 1 일 이후 숨길 수 없습니다.

감사합니다

+3

질문에 더 많은 노력을 기울이는 경우, 예를 들어 테이블과 컬럼의 이름을 알려 주거나 작업중인 데이터 세트와 달성하고자하는 것을 보여 주면 누군가가 SQL을 게시 할 것이라고 확신합니다 이. –

+0

hugh> 내 업데이트 참조. – Lennie

답변

1

이와 비슷한 것 :

SELECT AuthDate, ProductId, * 
FROM ProductOrders 
WHERE (NOT EXISTS (SELECT 1 FROM vwExcludeProductOrders WHERE ProductId = ProductOrders.ProductId) AND AuthDate < '2011-09-01') 
OR AuthDate >= '2011-09-01' 

분명히 *를 사용하여 모든 열을 선택하는 것은 좋지 않습니다. 검색해야하는 열만 지정해야하지만 요구 사항에 대한 정보가 없으면 제안 할 내용을 알기가 어렵습니다.

+0

해당 제품 세트에 대해서만 올바른 yes ...이 ProductOrders 테이블은 항상 포함해야하는 모든 제품을 포함하지만 특정 제품 세트의 경우 2011 년 9 월 1 일 전에 제외해야하며이 날짜 이후에 포함해야합니다. – Lennie

+0

정말 당신이 필요로하는 것을 이해하지 못해서 테이블 구조에 대한 자세한 내용과 달성하고자하는 내용을 원래 게시물을 편집해야한다고 생각합니다. –

+0

제 생각에 맞춰 내 대답이 정확하다고 생각합니다. –