Это мой первый пост здесь.
Мой вопрос похож на предыдущую тему, хотя и отличается:
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;
Теперь, это делает именно то, что я хочу, но ... есть ли лучший способ?
Заранее спасибо.