2011-04-05 5 views
0

구별되는 카테고리를 얻고 싶습니다. 구획화 된 열로 결과를 얻고 싶습니다.주문 별 구별

select distinct(Category)'Category' from sizes order by curdate desc 

그러나이 간단한 쿼리는 오류를 생성하고 있습니다.

SELECT DISTINCT가 지정된 경우 ORDER BY 항목이 선택 목록에 나타나야합니다.

답변

6

난 당신이 GROUP BY 조항에 관해서는 SELECT DISTINCT에 대해 같은 제약 조건이 두려워 : 즉, 당신은 필드의 사용을 할 수 없습니다 즉, Category에 대해 서로 다른 curdate 값을 가진 여러 행이있는 경우 정렬 할 때 어떤 curdate을 사용할 지 알 수 없기 때문에 필드 목록에 선언되어 있지 않습니다.

편집 : MIN과 MAX를 교체

SELECT Category FROM sizes GROUP BY Category ORDER BY MAX(curdate) DESC 

나에게 맞는 어떤 : 뭔가를하려고합니다.

EDIT2 : MAX (curdate)는 집계 함수에서 사용 되었기 때문에 필드 목록에있을 필요조차 없습니다.

0
CURDATE 지금 당신은 단지 종류를 지정하는, 또한 당신의 선택 문에 있어야합니다

+0

나는 seelct 절에 CURDATE가 의도 한대로, Category'와'의 독특한 조합'CURDATE는 DISTINCT 카테고리가 반환 –

0

오류 메시지가 표시되면 SELECT DISTINCT을 사용하여 wehen이 선택되지 않은 열로 주문할 수 없음 (GROUP BY ...과 같은 문제). 여기에 검색어를 변경합니다

SELECT DISTINCT category, curdate FROM sizes ORDER BY curdate DESC 

편집 :를 yourt 코멘트에 회신 :
당신이 모든 범주의 마지막 날짜와 별개의 범주를 선택하려는 경우, 당신은 당신의 쿼리를 약간 수정해야합니다 . 나는 이것을 위해 두 가지 가능성을 생각할 수있다 : Costi Ciudatu처럼 MAX()를 사용하여 subselects로 어떤 미친 물건을 게시하거나 수행한다 - 첫 번째 방법이 더 나은 접근 방법이다.

+0

을 반환하지 않습니다 seelct 절에 CURDATE를 추가하는 경우 ' –

+0

를 반환하지 않습니다 추가하는 경우가 DISTINCT 카테고리 – oezi

1

모든 카테고리 목록과 각 날짜와 관련된 날짜가 표시됩니다. 과 관련된 가장 최근할지 여부에 따라

SELECT Category, MIN(curdate) FROM sizes GROUP BY Category 

또는 이른 날짜 :

SELECT Category, MAX(curdate) FROM sizes GROUP BY Category 

또는를 : 당신이 가장 빠른 첫 번째 또는 최신 먼저 것인지, 다음 중 하나를 수행 할 수 있어야한다 각 카테고리. 신청 소트의 일부가 아닌 경우

ORDER BY MAX(curdate) 
ORDER BY MIN(curdate) 
+0

응급보다는 분류하여 그룹화해야합니다. – Rozwel

+0

@Rozwel - 오! 결정된. – Jaymz

0

가 정확히 오류가 말하는, 그것은 별개의 목록을 주문할 수 없습니다 : 그런 다음 날짜로 ORDER 에드로 목록을 필요로하는 경우, 마지막에 다음 중 하나를 추가 선택. 이유는 선택한 고유 값 각각에 대해 여러 정렬 값이있을 수 있기 때문입니다. 데이터가 다음과 같이 보이는 경우

Category CurDate 
AAA   1/1/2011 
BBB   2/1/2011 
AAA   3/1/2011 

별개 목록의 BBB 이전이나 이후에 AA를 사용해야합니까? 뚜렷한 날짜없이 방금 주문한 경우 두 위치에서 모두 구할 수 있습니다. SQL은 고유 한 범주와 연관되어야하는 날짜를 알지 못하기 때문에 날짜별로 정렬 할 수 없습니다.

1
with cte as 
(
    select 
    Category, 
    [CurDate], 
    row_number() over(partition by Category order by [CurDate]) as rn 
    from sizes 
) 
select 
    Category 
from cte 
where rn = 1 
order by [CurDate]