2013-11-28 143 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的ResultSet中,采取了例如与id = 133导致。
  • 我想查看该记录中日期之后发生的第一个操作(id = 113)。
  • 该记录的日期是November, 27 2013 00:00:17+0000
  • 现在有两种可能的行动发生在该日期之后:
  • 1)origin = 'playerjoins'mindate = November, 28 2013 00:00:18+0000
  • 2)origin = 'playerleaves' on mindate = November, 28 2013 00:00:19+0000
  • 由于playerjoins是第一次发生的事情,我希望在我的最终结果集中。

所以,我希望我的例子很清楚:我希望对于具有相同ID的每2行,具有最低的mindate的行。我需要能够看到整个行,所以只知道最低mindate每2行不是就足够了。我也需要知道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