2013-07-22 4 views
0

안녕하세요. SQL 문제가 있습니다. 결과를 얻고 싶지만 원하는 것은 시작 15 분을 얻는 것뿐입니다. |15 분 간격으로 시작하는 결과보기

타이머 :

SELECT CONCAT(CAST(DATE_FORMAT(date_added, '%h') AS CHAR(2)), ':', 
CAST(DATE_FORMAT(date_added, '%m') AS CHAR(2))) timer, 
COUNT(*) ctrRes from tbl1 WHERE id = 1 AND cat = 2 
GROUP BY (3 * HOUR(date_added) + FLOOR(MINUTE(date_added)/15)) 

샘플 결과 :

여기에 내 현재 쿼리 ctrRes

01:28 | 1

01:44 | 22

02:14 | 253

02:29 | 238

빈 결과에 관계없이 00:15부터 레코드를 가져 오는 방법이 있습니까? 감사.

답변

0

무언가가 그 시간 슬롯에 있는지 여부와 관계없이 레코드가 반환되기를 원합니다. MySQL이 돌아올 수있는 무언가가 있어야합니다. SQL은 데이터를 검색하지 않고 데이터를 검색하는 데 사용되므로 데이터가 없으면 가져올 수 없습니다. 따라서 데이터를 검색하여 검색 할 수있는 방법이 필요합니다.

모든 쿼리에서이 데이터를 임시로 만들거나 실제 테이블에서 데이터를 구체화 할 수 있습니다. 이 쿼리를 자주 실행하려면 데이터를 구체화하는 것이 좋습니다. 요일을 생성하는 예제는 https://gist.github.com/johngrimes/408559입니다. 날짜 대신 시간을 생성하도록 사용자 정의 할 수 있습니다.

은 그런 결과가된다 뭔가 같은 :

select * from TimeTable left join tbl1 on ... where <some range criteria> 
관련 문제