Как получить последний доступный набор данных из таблицы MySQL (наборы данных хранятся ежедневно)? - PullRequest
0 голосов
/ 06 февраля 2011

У меня есть таблица MySQL со следующей настройкой:

CREATE TABLE IF NOT EXISTS `coords` (
  `project_id` int(4) NOT NULL,
  `day` tinyint(4) NOT NULL,
  `x` tinyint(4) NOT NULL,
  `y` tinyint(4) NOT NULL,
  `z` tinyint(4) NOT NULL,
  PRIMARY KEY (`tid`,`day`,`x`,`y`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Каждый проект выполняется несколько дней. Каждый день проверяются некоторые случаи, и результаты (набор координат) сохраняются в этой таблице (вместе с идентификатором проекта и номером дня). Один и тот же набор координат x и y можно сохранять чаще, чем один раз (координата z является фактическим результатом).

Теперь я хочу получить все доступные наборы координат для одного проекта с самыми последними доступными данными.

Т.е., при условии, что у меня есть следующие данные:

pid | day | x | y | z
  1 |   1 | 2 | 1 | 5
  1 |   1 | 2 | 2 | 6
  1 |   2 | 3 | 3 | 7
  1 |   3 | 2 | 1 | 8
  1 |   3 | 3 | 3 | 9

Теперь запрос должен вернуть:

day | x | y | z
  1 | 2 | 2 | 6
  3 | 2 | 1 | 8
  3 | 3 | 3 | 9

Я пытался следующий запрос:

SELECT day, x, y, z 
FROM coords 
WHERE pid = 1 
GROUP BY CONCAT(tid,'.',x,'.',y) 
ORDER BY day DESC

Но этот запрос возвращает старые данные, так же как день = 1, x | y | z = 2 | 1 | 5 вместо дня = 3 и x | y | z = 2 | 1 | 8.

Может кто-нибудь, пожалуйста, указать мне в правильном направлении того, что мне здесь не хватает?

Спасибо заранее, Пол

Ответы [ 2 ]

1 голос
/ 06 февраля 2011

Попробуйте это:).

SELECT
  day,
  x,
  y,
  z 
FROM
  coords
    JOIN
  (SELECT MAX(tid) AS max_tid FROM coords GROUP BY CONCAT_WS('.', day, x, y)) sub ON (sub.max_tid = coords.tid)
WHERE
  pid = 1
1 голос
/ 06 февраля 2011

хорошо, я думаю, у вас есть проблема, потому что, как только вы сделаете Select * from coords order by day asc limit 1, вы получите случайно.2.1.5 или 2.2.6.в зависимости от того, как база данных чувствует это.Вы определенно нуждаетесь в более конкретном «dayting» или ID или что-то в соответствии с тем, что база данных будет знать, в каком порядке были вставлены эти строки. Например, добавьте туда поле id.

Select distinct day, x,y,z 
FROM coords
where pid = 1
order by id desc

Это может сделать магиюесли вы добавите туда поле id

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...