[SQL] MySQL의 테이블에서 날짜가 기록의 가장 최근의 세트를 선택하는 방법
SQLMySQL의 테이블에서 날짜가 기록의 가장 최근의 세트를 선택하는 방법
나는 다음과 같은 필드 MySQL의 테이블에 여러 RPC 호출에 대한 응답을 저장하고있다 :
Table: rpc_responses
timestamp (date)
method (varchar)
id (varchar)
response (mediumtext)
PRIMARY KEY(timestamp,method,id)
방법 및 ID의 기존의 모든 조합에 대한 가장 최근의 응답을 선택하는 가장 좋은 방법은 무엇입니까?
샘플 데이터 :
timestamp method id response
2009-01-10 getThud 16 "....."
2009-01-10 getFoo 12 "....."
2009-01-10 getBar 12 "....."
2009-01-11 getFoo 12 "....."
2009-01-11 getBar 16 "....."
원하는 결과 :
2009-01-10 getThud 16 "....."
2009-01-10 getBar 12 "....."
2009-01-11 getFoo 12 "....."
2009-01-11 getBar 16 "....."
(나는이 같은 문제라고 생각하지 않습니다 - 그것은 나에게 가장 최근의 응답을 제공하지 않습니다)
해결법
-
==============================
1.어떤 조인이 없기 때문에이 캔 쿼리는 잘 수행 할 수 있습니다.
어떤 조인이 없기 때문에이 캔 쿼리는 잘 수행 할 수 있습니다.
SELECT * FROM ( SELECT timestamp, method, id, response FROM rpc_responses WHERE 1 # some where clause here ORDER BY timestamp DESC ) as t1 GROUP BY method
은 "에 의해 그룹은"때문에 내부 쿼리에서 타임 스탬프 DESC BY 순서, 결과 방법에 세트 및 반환 방법 당 1 행, 가장 최근을 축소합니다.
참고로, PostgreSQL는 언어에 내장이 일을하는 방법이있다 :
SELECT DISTINCT ON (method) timestamp, method, id, response FROM rpc_responses WHERE 1 # some where clause here ORDER BY method, timestamp DESC
-
==============================
2.자기가 대답,하지만 난 테이블이 성장함에 따라이 효율적인 충분한 해결책이 될 것입니다 확실하지 않다 :
자기가 대답,하지만 난 테이블이 성장함에 따라이 효율적인 충분한 해결책이 될 것입니다 확실하지 않다 :
SELECT timestamp,method,id,response FROM rpc_responses INNER JOIN (SELECT max(timestamp),method,id FROM rpc_responses GROUP BY method,id) latest USING (timestamp,method,id);
-
==============================
3.이 시도...
이 시도...
SELECT o1.id, o1.timestamp, o1.method, o1.response FROM rpc_responses o1 WHERE o1.timestamp = ( SELECT max(o2.timestamp) FROM rpc_responses o2 WHERE o1.id = o2.id ) ORDER BY o1.timestamp, o1.method, o1.response
... 그것도 Access에서 작동합니다!
-
==============================
4.난 날 위해, 일을 사용
난 날 위해, 일을 사용
select max(timestamp),method,id from tables where 1 group by method,id order by timestamp desc
-
==============================
5.데이터 세트가 커지면 부질 매우 과세된다.
데이터 세트가 커지면 부질 매우 과세된다.
이 시도:
SELECT t1.* FROM rpc_responses AS t1 INNER JOIN rpc_responses AS t2 GROUP BY t1.method, t1.id, t1.timestamp HAVING t1.timestamp=MAX(t2.timestamp) ORDER BY t1.timestamp, t1.method, t1.response;
-
==============================
6."가장 최근"의 개념은 매우 모호합니다. 당신은 (100) 가장 최근의 행과 같은 평균 뭔가 당신은 당신의 SELECT 절에 TOP (100)를 추가 할 수 있습니다.
"가장 최근"의 개념은 매우 모호합니다. 당신은 (100) 가장 최근의 행과 같은 평균 뭔가 당신은 당신의 SELECT 절에 TOP (100)를 추가 할 수 있습니다.
당신은 그냥 할 수있는 가장 최근의 날짜를 기준으로 "가장 최근"을 의미하는 경우
SELECT timestamp,method,id,response FROM rpc_responses HAVING max(timestamp) = timestamp
-
==============================
7.... 이상 1 년 후입니다하지만 난 사람을 도움이 될 수 있습니다 모든 쿼리가 최근부터 선택
... 이상 1 년 후입니다하지만 난 사람을 도움이 될 수 있습니다 모든 쿼리가 최근부터 선택
SELECT * FROM rpc_responses ORDER BY timestamp DESC
from https://stackoverflow.com/questions/435703/how-to-select-the-most-recent-set-of-dated-records-from-a-mysql-table by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] mysql을 - 너무 많은 얼마나 많은 열입니까? (0) | 2020.04.30 |
---|---|
[SQL] MySQL의 쿼리 선택 - 값의 취득에만 처음 10 자 (0) | 2020.04.30 |
[SQL] 단정를 사용하는 경우 연결을 닫기 (0) | 2020.04.30 |
[SQL] MySQL의 : 등에 의해 주문? (0) | 2020.04.30 |
[SQL] 하위 쿼리와 상관 하위 쿼리의 차이 (0) | 2020.04.30 |