MYSQL строк в столбцы, используя CASE, GROUP BY ... а как насчет разных версий? - PullRequest
0 голосов
/ 04 января 2012

Это мой первый пост здесь.

Мой вопрос похож на предыдущую тему, хотя и отличается: mysql преобразование нескольких строк в столбцы в одной строке

То, что у меня есть, действительно большая форма. Есть много форм (листы, на самом деле), и каждая имеет одинаковую настройку. Каждая форма имеет метки и значения, но значения в формах могут быть изменены, и формы отображают только «последние» значения. В базе данных есть несколько таблиц, но важными здесь являются field_labels и field_values. Эти два связаны, как можно подозревать, и у таблицы field_value есть столбец «date».

Теперь я не хочу выбирать field_label.id и последнее значение (field_value.fv_value). Сначала я подумал, что это может нормально работать с CASE, но проблема в том, что CASE прекращает поиск в таблице сразу после того, как находит совпадение, я хочу выбрать последнее совпадение, а не только первое совпадение.

Единственная хорошая идея, которая у меня была до сих пор, - это использовать подзапрос и реформировать таблицу значений, упорядочив ее сначала по (связанному) идентификатору меток, а затем по '' дате '' значения. Вот что я получил

SELECT T.msdsid,
       field_label.id,
       (CASE WHEN field_label.id = 1 THEN T.fv_value ELSE NULL END) AS value
FROM (SELECT * FROM field_value ORDER BY field_value.fl_id,field_value.date DESC) AS T
LEFT JOIN field_label ON(T.fl_id=field_label.id)
GROUP BY T.refid;

Теперь, это делает именно то, что я хочу, но ... есть ли лучший способ?

Заранее спасибо.

1 Ответ

1 голос
/ 04 января 2012

Этот запрос покажет вам последние значения (записи) для каждого field_value.fl_id:

SELECT fv1.* FROM field_value fv1
  JOIN (SELECT fl_id, MAX(date) date FROM field_value GROUP BY fl_id) fv2
    ON fv1.fl_id = fv2.fl_id AND fv1.date = fv2.date;

Попробуйте этот запрос, поиграйте с ним и добавьте его в свой запрос.

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