2014-05-21 2 views
2

내가 날짜 difference.my 종류 현재 작업으로 분류 쿼리를 가지고 있지만 난 priority<=10 THEN 10은 현재 우선 순위 현재MySQL의 쿼리

내 쿼리 추가 될 경우

같은 조건 케이스를 사용하려면 수정 우선 순위 값의 기본 비정상적인 값을 반환

내 쿼리는

SELECT videoid,priority, 
     CASE WHEN priority<=10 THEN (priority+10) 
      WHEN priority>10 and priority<=20 THEN (priority+9) 
      WHEN priority<=30 THEN (priority+8) 
     END AS 'modified_priority', 
     DATEDIFF(CURDATE(), 
     DATE(from_unixtime(submittime))) AS d 
FROM 
    `datatable` 
ORDER BY d 
+0

은 30보다 우선되어야합니다. = 30? –

+0

@ user3660286 : * 'default abnormal value'*를 정의하십시오. –

+0

답변으로 문제가 해결 되었습니까? –

답변

4

당신의 마지막 경우는 모두 일치합니다. 시도해보십시오

SELECT videoid,priority, 
     CASE WHEN priority <=10 THEN (priority+10) 
      WHEN priority>10 and priority <=20 THEN (priority+9) 
      WHEN priority>20 AND priority <=30 THEN (priority+8) 
     END AS `modified_priority`, 
     DATEDIFF(CURDATE(), 
     DATE(from_unixtime(submittime))) AS d 
FROM 
    `datatable` 
ORDER BY d 
+1

네, 같은 생각합니다. +1 –

+1

'ELSE' 역시 트릭을 할 것입니다 – georstef

+0

나는 http://sqlfiddle.com/#!2/03dfb/1과 같은 생각을하지 않습니다. –

3

사례 문은 첫 번째 일치 조건이 반환되고 순서대로 처리됩니다. 당신이 우선 순위 NULL 30보다 큰 값 반환하지 않을 경우 당신은 ELSE 절을 필요

SELECT videoid, priority, 
     (CASE WHEN priority <= 10 THEN (priority+10) 
      WHEN priority <= 20 THEN (priority+9) 
      WHEN priority <= 30 THEN (priority+8) 
     END) AS modified_priority, 
     DATEDIFF(CURDATE(), DATE(from_unixtime(submittime))) AS d 
FROM `datatable` 
ORDER BY d; 

: 당신은 당신의 이점에 이것을 사용에 문을 단순화 할 수 있습니다. 아마도 :

SELECT videoid, priority, 
     (CASE WHEN priority <= 10 THEN (priority+10) 
      WHEN priority <= 20 THEN (priority+9) 
      WHEN priority <= 30 THEN (priority+8) 
      ELSE priority 
     END) AS modified_priority, 
     DATEDIFF(CURDATE(), DATE(from_unixtime(submittime))) AS d 
FROM `datatable` 
ORDER BY d; 

또한 작은 따옴표를 modified_priority에서 삭제했습니다. 문자열 및 날짜 상수에는 작은 따옴표 만 사용해야합니다.