2012-05-23 4 views
1

제목은 매우 신빙성이 있지만 여기는 내 질문입니다.2 일 스패닝 일의 시간별 SQL 순서

나는 하루 동안 일정표가 있습니다 (여행 일정표). 각 엔트리 (예 : 박물관 방문)에는 slot_start 및 slot_end 시간 열이 있습니다. 24 시간 형식이므로 예를 들어 13:00:00 - 15:00:00입니다.

나는 이것을 slot_start asc로 주문하고 싶지만 slot_start 00:00:00 ie와 함께 "bar/club 이동"에 대한 항목을 가질 수 있습니다. 자정은 먼저 명령을 내릴 것이고 그것은 올바른 순서가 될 것이지만, 실제로 이것이 박물관 다음에 오기를 원하는 새로운 날이기 때문에.

특정 날짜가 없습니다. 그들은 단지 슬롯 시간에 의해 제약을 받고 하루 동안의 사건으로 생각합니다.

누구나 이런 종류의 설정 경험이 있습니까? 아니면 누구든지 각 '이벤트'의 시간을 설정하는 다른 방법을 제안 할 수 있습니까? 나는

+0

어떤 DBMS를 주문하려면 추가? SQL은 언어입니다. –

+0

예, MySQL을 사용합니다. – iamjonesy

답변

0

여러 열을 기준으로 주문할 수 있습니다 사용하여 ... 나는 그것을, 1 일, 2면에서 어떤 일의 일부 요소를 도입해야 할 수도 있습니다 같아요 그래서

ORDER BY Day, Time 
0

"0시 : 00 "은 박물관 다음에 00:01:00에 클럽에 입장 했습니까? 00:01:00?

테이블을 제어하려면 "하루"가 필요합니다.

이 문제에 매우 "못생긴"솔루션이 같은 것입니다 :

첫번째 항상 "오래된"기록을 고려하는 "제한"을 선택, 오전 3시에게 말할 수 있도록 3 후 "간주됩니다 전에 모든 레코드 "그 밖의 모든 것. 그 다음 :

select * 
from your_table 
where slot_start > '03:00:00' 
order by slot_start 

union 

select * 
from your_table 
where slot_start < '03:00:00' and slot_start > '00:00:00' 
order by slot_start 

그러나 이것은 다시 좋은 해결책이 아닙니다. 이상적으로 테이블에 "하루"제어가 필요합니다.

+0

'ORDER BY ('00 : 00 : 01 '과 '02 : 59 : 59'사이에 slot_start가 아님) DESC, slot_start ASC'가 'union'을 사용하면 더 쉬울까요? –

0

저는 개인적으로 start_unix 및 기간을 사용합니다.

  • start_unix 이벤트가
  • 기간이 시작됩니다 UNIX_TIMESTAMP는 단순히 시간
  • end_unix = (start_unix + 시간) 이러한 문제의 전체 제어를 달성 할 수있는 쉬운 방법

입니다 .

죄송합니다. 자정을 지나는 사람들은 예를 들어 25:00:00 (01:00:00)으로 설정하고 표시 할 때는 SELECT MOD(slot_start, 24) AS slot_start_modORDER BY slot_start입니다.

0

여기서 아이디어는 정렬을 위해 실제 Slot_start 시간에서 1 분을 뺄 수 있습니다 (그러나 테이블에서 날짜 열을 사용하는 것이 좋습니다).

Select * from Table order by dateadd(minute,-1,TIME) 

DATEADD 함수는 TIME 컬럼 (-1) 분은 단지 그들에게