Начнем с того, что я почти выполнил свой запрос 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
Это дало мне ResultSet (часть его), который можно найти на следующих SQL Fiddle: http://sqlfiddle.com/#!2/514b6/1/0
Я хочу следующее:
- Теперь вы видите, что есть повторяющиеся
id
«s в результирующем, возьмите для примера привести с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'
mindate = November, 28 2013 00:00:19+0000
. - С тех пор, как
playerjoins
- это тот, который впервые произошел, я хочу, чтобы это было в моем конечном наборе результатов.
Итак, я надеюсь, что в моем примере ясно, что для каждых 2 строк с одним и тем же идентификатором я хочу иметь строку, которая имеет самый низкий mindate
. Мне нужно уметь видеть целый ряд, так что зная самое низкое mindate
за 2 строки, не хватает. Мне также нужно знать origin
.
EDIT: Ответ можно найти здесь, https://stackoverflow.com/a/7745635/2057294, все еще исследуя его.