2013-11-28 5 views
2

MySQL 쿼리를 거의 완료했다고 가정 해 봅시다. 그러나 답변을 찾기위한 마지막 힌트가 필요합니다. 그룹 뒤에 가장 작은 날짜를 선택하십시오.

나는 (참조) 다음 MySQL의 쿼리 사용 :

SELECT * FROM 
(
    SELECT ll.id AS id, ll.globalId AS globalId, ll.date AS date, ll.serverId AS serverId, ll.gamemodeId AS gamemodeId, ll.mapId AS mapId, origin, 
    pjl.id AS pjlid, pjl.globalid AS pjlglobalId, pjl.date AS pjldate, MIN(pjl.date) AS mindate, pjl.serverId AS pjlserverId, pjl.playerId AS pjlplayerId 
    FROM (
      (
       SELECT id, globalId, date, serverId, playerId, 'playerjoins' AS origin 
       FROM playerjoins pj 
       WHERE playerId =976 
      ) 
     UNION ALL 
      (
       SELECT id, globalId, date, serverId, playerId, 'playerleaves' AS origin 
       FROM playerleaves pl 
       WHERE playerId =976 
      ) 
     ORDER BY date DESC 
    )pjl 
    JOIN levelsloaded ll ON pjl.date >= ll.date 
    GROUP BY ll.id, origin 
ORDER BY date DESC) above 

를이 나에게 결과 집합 (의 일부), 그는 다음 SQL 바이올린에서 찾을 수 있습니다 제공 : http://sqlfiddle.com/#!2/514b6/1/0

를 내가 원하는는 다음

이제 중복 id 년대는 결과 집합에 있다는 것을 볼
  • , id = 133과 결과의 예 걸릴.
  • 해당 기록 (id = 113)의 날짜 이후에 발생한 첫 번째 작업을보고 싶습니다.
  • 해당 레코드의 날짜는 November, 27 2013 00:00:17+0000입니다.
  • 이제 해당 날짜 이후에 직접 발생한 문제는 두 가지가 있습니다.
  • origin = 'playerjoins'mindate = November, 28 2013 00:00:18+0000입니다.
  • 2) origin = 'playerleaves' on mindate = November, 28 2013 00:00:19+0000.
  • playerjoins이 처음 발생 했으므로 최종 결과 세트에서 그 값을 원합니다.

그래서 예를 들어 분명히하기를 바란다 : 동일한 ID를 가진 두 행마다 최소 mindate 행을 갖고 싶습니다. 전체 행을 볼 수 있어야하므로 2 행당 최저 mindate만을 알면 이 아니라이면 충분합니다. 나는 origin을 알고 싶다.

편집 : 대답은 여기에서 찾을 수 있습니다. https://stackoverflow.com/a/7745635/2057294, 아직 조사 중입니다.

답변

0

올바른 쿼리는 다음과 같습니다

이 내가 설명을 정확하게 수행
SELECT * 
FROM levelsloaded ll 
INNER JOIN 
    (SELECT id, MIN(mindate) AS finalmindate 
    FROM levelsloaded 
    GROUP BY id 
) ill 
ON ll.id = ill.id AND ll.mindate = ill.finalmindate 
ORDER BY date DESC 

은, 더 자세한 대답은에서 찾을 수 있습니다 https://stackoverflow.com/a/7745635/2057294.

관련 문제