2013-11-28 80 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