2012-11-09 2 views
1

해당 시점에 마지막으로 기록 된 수량을 반환하려면 특정 시점 쿼리를 수행하려고합니다. 나는 25의 생성과 이상이 또는 가장 최근에 알려진 양의가 생성 쿼리를 실행 한 이후의 수량을 반환하려면 60 생성 된 쿼리 경우조건이 반환 값보다 큰 경우 이전 레코드 선택

는 기본적으로 나는 테이블은

id | other_id | quantity | created 
1  1   5  20 
2  1   2  22 
3  1   1  25 
4  1   8  90 

로 포맷 한이었다 . 4하지만 난 ID이었다 (60)에 생성합니다 : ID를 반환

SELECT * FROM table 
WHERE created >= 60 
AND other_id = 1 
ORDER BY ID ASC 

3 그러나 쿼리 작성한 경우 내가 기압없는에 튀긴 (25)와 큰

뇌를 반환 할 25이었다 올바른 솔루션

+1

응? 나는 60 세가 전혀 보이지 않는다. 당신이 원하는 것을 분명히하는 것으로 시작할지도 모른다. – Randy

+0

행이 없으면 어떻게 'at 60'에서 행을 만들 수 있습니까? –

+0

쿼리가 생성됨> = 60 검색된 레코드가 최신이고 이전 레코드가있는 경우 이전 레코드를 원합니다. – fyrye

답변

1

이 쿼리는 원하는 값 앞에 값을 선택 마련 :

SELECT MAX(created) 
FROM yourtable 
WHERE other_id = 1 
AND created <= 60 

당신은 다음 내부 하위 쿼리로 사용할 수 있습니다 당신의 주요 질의 :

SELECT * 
FROM yourtable 
WHERE created >= 
(
    SELECT IFNULL(MAX(created), -1) 
    FROM yourtable 
    WHERE other_id = 1 
    AND created <= 60 
) 
AND other_id = 1 
ORDER BY ID ASC 
+0

이전 레코드가없는 경우 IFNULL ((최대 MAX (t2.created) FROM thetable AS t2 WHERE t2를 선택하십시오. other_id = t1.other_id 및 t2.created <=?),?) thanks – fyrye

1
SELECT * FROM table 
WHERE id >= (
    SELECT id FROM table WHERE created <= 60 
    AND other_id = 1 
    ORDER BY id DESC LIMIT 1 
) 
AND other_id = 1 
ORDER BY id ASC 
관련 문제