2012-01-04 25 views
0

這是我第一篇文章。MYSQL行到使用CASE,GROUP BY的列...那麼不同的版本呢?

我的問題是類似於前一個線程儘管不同: mysql converting multiple rows into columns in a single row

什麼我真的是一個大的形式。有很多表單(真的),每個表單都有相同的設置。每個表格都有標籤和值,但表格中的值可以更改,表格只顯示「最新」值。數據庫有幾個表,但這些重要的是field_labels和field_values。這兩個鏈接可能會被懷疑,而field_value表有一個「日期」列。

現在,我想要做的是選擇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

這個查詢將顯示每個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; 

嘗試此查詢,玩它,並把它添加到你的查詢。