2017-03-20 2 views
0

응용 프로그램의 활동 로그를 기록하는 데 사용하는 테이블이 있습니다. 이제 엔티티 X에서 일정 범위의 날짜에 게시 된 모든 레코드를 가져와야합니다. 따라서 레코드가 게시되고 나중에 게시되지 않으면 결과에 나타나지 않아도됩니다.여러 행의 마지막 값 가져 오기 MYSQL

실제로 어떻게 설명해야할지 모르겠다. 각각의 마지막 모습을 찾아서 "1"또는 "0"인 값을 잡아, 각 경우에 필요에 따라 다릅니다.

단순화 된 예는 (실제 표는 더 필드와 더 많은 데이터를 가지고) :

id user_id date   model main_relation_id field new_value 
1 24  2017-03-21 A  1    publish 1 
2 24  2017-03-21 A  2    publish 1 
3 24  2017-03-22 A  3    publish 0 
4 24  2017-03-22 A  2    update some text 
5 24  2017-03-23 A  1    publish 0 
6 24  2017-03-23 A  1    update some text 
7 24  2017-03-24 A  3    publish 1 
8 24  2017-03-24 A  2    publish 0 
9 24  2017-03-24 A  2    update some text 
10 24  2017-03-25 A  1    publish 1 
11 24  2017-03-25 A  2    publish 1 
11 24  2017-03-26 A  3    publish 0 

내가 모델 A로부터 모든 레지스터를 얻고 싶은 경우에, 그래서 내가 모델과 날짜별로 필터링, main_relation_id을 얻을 필요가

model_main_relation_id 
1 
3 

을 내가 같은 날짜에 미 출판 된 모든 레지스터를 얻으려면, 결과는해야 : 2017년 3월 21일 및 2017년 3월 24일 사이에 발표되었다 나는 얻을 것이다 :

model_main_relation_id 
2 

어떻게 결과를 얻을 수 있습니까?

답변

0

그래서, 당신은 특정 main_relation_id 출판 (field='publish'; new_value=1) 또는 기간 내 (field='publish'; new_value=0) 미 출판되었는지 여부, main_relation_id하여 최신 상태를 필터링하고 싶습니다.

샘플 데이터의 date 필드 내의 날짜가 여러 레코드에서 동일하므로, id 필드의 더 높은 값은 나중의 이벤트를 의미한다고 가정해야합니다. 따라서 max(id)/main_relation_id은 최신 짝수 레코드를 생성합니다. 내가 할 것이 무엇

field'publish' 인 파생 테이블의 특정 모델에 대한 날짜 범위 내에서 main_relation_idmax(id)을 얻고 특정 main_relation_id를 발행하는지 여부를 확인하기 위해 테이블이 다시 가입하는 것입니다

select table.main_relation_id 
from table 
inner join 
    (select main_relation_id, max(id) as maxid 
    from table 
    where date>=... and date<=... and `field`='publish' and model='...' 
    group by main_relation_id) t on table.id=t.maxid 
where table.new_value=1 

... 대신 필터 기준을 사용해야합니다. 게시되지 않은 데이터를 가져 오려면 table.new_value=1 기준을 table.new_value=0으로 바꿉니다.

+0

성공적으로 작동합니다. 감사! –

관련 문제