2013-02-01 2 views
2

2 월 3 일을 가장합니다.일별 및 월별 쿼리 선택 쿼리

그리고 테이블을 가지고는 :

나는 다음과 같은 순서로 모든 레코드를 반환합니다 선택 쿼리를 구축하고자
id date 
1 2013-01-01 
2 2013-02-02 
3 2013-03-03 
4 2013-04-04 

(날짜순 :

CREATE TABLE devotion 
(
    id serial NOT NULL, 
    date timestamp without time zone 
} 

그리고 4 개 레코드가 그러나 예정된 날짜부터 시작하여 날짜의 마지막에 추가 날짜가 전달됩니다.

id date 
3 2013-03-03 (upcoming dates first) 
4 2013-04-04 
1 2013-01-01 (passed dates appended to the end of the list) 
2 2013-02-02 

전체 reco rds는 같은 해를 보냈습니다. 사실, 1 년은 중요하지 않으며, 단지 1 월과 2 월이 중요합니다. 더 나은 구조를 제안 할 수 있다면 매우 환영합니다.

+0

아마도 특정 정렬 순서와 where 절을 사용하는 두 개의 쿼리를 결합하여 사용했을 것입니다. – Resh32

+0

'desc'명령으로 주문이 필요하다고 생각하기에는 너무 간단합니다 ... – bonCodigo

+0

@Lamak thanks. 선물 & 과거의 양쪽 날짜는 ASC ... 재미있다. +1 질문. – bonCodigo

답변

4

order by case when date1 > now() then 0 else 1 end case, date1

3,4,1,2

+0

select 절을 추가 할 수 있습니까? – Dziamid

+0

와우,이 기능은 실제로 작동합니다. 여기에 문서에 대한 참조 만 추가하면됩니다. http://www.postgresql.org/docs/8.4/static/functions-conditional.html – Dziamid

0

의 순서는 MySQL을한다면 내가 말할 단지 RIGHT를 사용하는 거라고하지만, 아래 psql의 작동해야 제공됩니다

SELECT * FROM devotion ORDER BY substring(to_char(date, 'YYYY-MM-DD') from char_length(to_char(date, 'YYYY-MM-DD')) - 5) 
에게
1

다른 해결책이 있습니다. 위의 대답은 충분합니다. Feb 2nd을 나타내는 Now()을 복용하고 있기 때문에 오늘은 2 월 3 일이라고 가정 할 수 없습니다. 그래서 데모 데이터 2013-02-01을 사용했습니다. 이 대답은 주로 ID에 달려 있습니다. ID가 순차적이라고 말하면 날짜도 순차적입니다. 누구나 있습니다 .. 사기 부분이 논리에 의견을 자유롭게

MYSQL DEMO

select id, `date`, 
case when `date` > Date_Format(Now(),'%Y-%m-%d') 
then id-3 
else id+2 end as x 
from demo 
order by x asc 
; 

| ID |       DATE | X | 
-------------------------------------------- 
| 3 | March, 03 2013 00:00:00+0000 | 0 | 
| 4 | April, 04 2013 00:00:00+0000 | 1 | 
| 1 | January, 01 2013 00:00:00+0000 | 3 | 
| 2 | February, 01 2013 00:00:00+0000 | 4 | 
2

간단한 :

ORDER BY (date1 < now()), date1 

당신은 표현식의 부울 값으로 바로 주문 할 수 (date1 < now()).
FALSE 전에 정렬합니다. TRUE 전에 정렬합니다. NULL입니다.

관련 문제