우선, 다음은 사용하려는 쿼리입니다.MySQL이 예상대로 작동하지 않습니다.
SELECT * FROM Messages t WHERE perspective_user=? and timestamp BETWEEN ? AND ? AND
timestamp_added =
(select max(timestamp_added) from Messages t2
where
t2.author = t.author AND
t2.body = t.body AND
t2.timestamp = t.timestamp AND
t2.timestamp_added <= ?
) AND convo_id IN (SELECT convo_id FROM Conversations WHERE perspective_user=? AND identity=? AND timestamp_added=?);
코드는 다음 행없이 정상적으로 작동하지만 결과는 0입니다.
AND convo_id IN (SELECT convo_id FROM Conversations WHERE perspective_user=? AND identity=? AND timestamp_added=?);
나는 위의 행이 기본 SELECT * 쿼리에서 테스트되었음을 확인했습니다. 데이터베이스에 최상위 쿼리를 충족시키는 행이 있는지도 확인했습니다.
데이터는 Skype 메시지의 로그입니다. 로그는 무작위로 추출됩니다. 목표는 여전히 데이터베이스에있는 최신 로그를 얻는 것입니다. 목표는 내 Skype 메시지를 그래프로 나타내고 다른 재미있는 일을 할 수있게하는 것입니다. Skype는 이전 컴퓨터의 데이터베이스에서 데이터베이스를 지 웁니다. 긴 "timestamp_added"문은 각 메시지의 최신 항목을 가져 오는 것이므로 최신 로그에 제거 된 데이터베이스가있는 경우 이전 메시지가 계속 포함됩니다.
일부 샘플 데이터와 같은 GROUP_CONCAT()를 사용? –
샘플 데이터와 바인딩 매개 변수 및 예상 출력을 제공해야합니다. – ysth
t2 subselect를 사용하는 이유를 설명 할 수 있습니까? – ysth