2009-10-21 4 views
1

이 구문 만 사용하도록 제한되어 있다고 가정 해 봅니다 (MAX 또는 MIN과 같은 집계 함수를 사용할 수없고 GROUP BY 절을 사용할 수 없으며 ' 이유를 물어보십시오) :GROUP BY 및 집계 함수를 사용하지 않고 쿼리 실행

{SQL query} ::= SELECT [DISTINCT | ALL] [TOP {integer}] 
       {select_list} 
       FROM {table_reference} 
       [WHERE {search_condition}] 
       [ORDER BY {orderby} { ',' {orderby} } ] 

ITEM_ID라는 식별자가있는 ITEM 테이블이 있다고 가정 해 봅니다. 주어진 ITEM_ID에 대해 동일한 ITEM_ID이지만 SHIP_DATE가 다른 많은 행을 가질 수 있습니다. 이전 구문이 제공된 가장 최근의 SHIP_DATE가있는 ITEMS 만 반환하도록 쿼리를 작성하려면 어떻게해야합니까?

ORDER BY (최대 SHIP_DATE에서 최소 SHIP_DATE까지 정렬)와 결합 된 TOP N (결과 집합의 첫 번째 행 검색)을 이미 사용해 보았습니다. 어떤 아이디어 나 제안? 내가 뭘하려

이 같은 것입니다 :

SELECT TOP N * FROM ITEM WHERE ITEM_ID='X' ORDER BY SHIP_DATE DESC 

이 실제로 이전 쿼리가 작동하는 것 같군,하지만 그것을 할 수있는 더 좋은 방법이 있는지 궁금 하군요. http://publib.boulder.ibm.com/infocenter/p8docs/v4r5m1/index.jsp?topic=/com.ibm.p8.doc/developer_help/content_engine_api/guide/query_sql_syntax_ref.htm 거기 보인다

+0

"작동하지 않음"이 작동하지 않습니다. 정확히 무엇을 시도했는지, 예상 한 것과 당신이 얻은 것에 대해 훨씬 더 자세하게 설명하십시오. –

+0

감사합니다. 나는 조금 더 명확하게 설명했습니다. –

+0

수정 됨, TOP 1 대신에 TOP N이어야합니다. –

답변

1

:

SELECT TOP x 
     i.item_id, 
     i.ship_date 
    FROM ITEM i 
ORDER BY i.ship_date DESC 

... x는 독특한/별개의 ITEM.item_id 레코드의 수입니다. COUNT를 (를) 사용할 수 없으면 어떻게 될까요?

가장 최근의 ship_date 레코드를 결과 집합의 맨 위에 올리려면 ORDER BY i.ship_date DESC을 사용해야합니다.

+0

이 방법으로 끝 냈습니다. 감사합니다! –

0

이 구문은 엄격한인가, 또는 모든 대 별개가 당 열 단위로 지정할 수 있습니다

이 숙제를하지 않습니다, 나는 지원되는 파일 네트 P8 구문을 사용하여 쿼리를 작성해야 ? 예를 들어, 다음과 같이 할 수 있습니까?

SELECT ship_date, DISTINCT item_id FROM tablename ORDER BY ship_date; 

만약 그렇다면 작동합니까?

그렇지 않은 경우 검색어를 중첩 할 수 있습니까? (즉, table_reference 대신 부속 조회 사용)

+0

처음에는 유망 해 보였지만 쿼리를 시도했을 때 ... DISTINCT가 이런 방식으로 지원되지 않는다는 것을 알았습니다.이 방식 (터플 레벨, 열 레벨이 아님)으로 작동합니다. SELECT DISTINCT ship_date, item_id FROM tablename ORDER BY 선박 날짜; 하지만 그건 내가 필요로하는 것이 아닙니다. 감사! –

+0

그런 다음 쿼리를 중첩 할 수 있다면 어떻습니까? – Amber

1

절대 최신 ship_date가있는 항목 하나만 원하십니까? 그래서 다음 쿼리가 정확히 옳다면 :

SELECT TOP 1 * FROM ITEM WHERE ITEM_ID='X' ORDER BY SHIP_DATE DESC 

유일한 문제는 SHIP_DATE가 (날짜 시간 등) 오히려 좋은 것보다 (달력 날짜 등)을 거친 뭔가, 경우 다음 관계를 가질 수있는 수 있습니다. 이 경우 데이터베이스 엔진은 그 중 하나를 선택하려고하며 미리 알아낼 방법을 미리 알지 못합니다. 따라서 결정적으로 만들기 위해 주문에 다른 열을 추가하는 것이 좋습니다. ITEM.ship_date 다른 항목 레코드를 같은 날짜에 해당하지 않는 것으로 가정

+0

죄송합니다. TOP N이라고 말 했어야합니다. –

1
select distinct item_id from item 
where ship_date = 
    (select top 1 ship_date from item order by ship_date desc) 
+0

ship_date가 가장 최근의 날짜와 동일한 레코드 만 가져옵니다. ** ** 모든 항목은 해당 날짜에 배송해야하며 동시에 ITEM.ship_date에 DateTime 데이터 유형을 사용하는 경우 –