2012-01-04 11 views
0

これは私の最初の投稿です。CASE、GROUP BY ...を使用したMYSQL行から列...異なるバージョンはどうですか?

私の質問は異なるとはいえ、前のスレッドのようになります。私が持っているもの mysql converting multiple rows into columns in a single row

本当に大きなフォームです。多くのフォーム(シート、本当に)があり、それぞれが同じ設定をしています。各フォームにはラベルと値がありますが、フォーム内の値は変更でき、フォームには「最新の」値のみが表示されます。データベースにはいくつかのテーブルがありますが、ここで重要なのはfield_labelsとfield_valuesです。これら2つはリンクされており、field_valueテーブルには「日付」の列があります。

ここでは、field_label.idと最新の値(field_value.fv_value)を選択することはできません。最初に私はこれがCASEでうまくいくかもしれないと思ったが、問題は一致するヒットを見つけた直後にCASEがテーブルを検索するのを止め、最初のものだけでなく最新のヒットを選択したい。

私が今までに持っていた唯一の良い考えは、サブクエリを使用して、ラベルの(リンクされた)IDで値の表を並べ替え、次に値の「日付」で並べ替えることです。ここでは、より良い方法がある...これはまさに私がやりたいん、しかし、私は今

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

このクエリを使用すると、各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; 

は、このクエリを試してみてくださいそれを再生し、あなたのクエリにそれを追加します。

関連する問題