2
OK選擇列,這是我的SQL,和我使用MySQL:在同一行MAX(列)
SELECT
assets.id,
IF(max(asset_checkins.time) IS NULL AND max(asset_checkouts.time) IS NOT NULL, 'checked-out',
IF(max(asset_checkouts.time) > max(asset_checkins.time), 'checked-out',
'checked-in')
) 'status',
asset_checkouts.user, asset_checkouts.location
FROM
assets
left outer join asset_checkouts on asset_checkouts.asset = assets.id
left outer join asset_checkins on asset_checkins.asset = assets.id
group by assets.id;
的問題是,用戶和位置列不從該行對應的未來到該資產的最大值(psdl_asset_checkouts.time)。
相反,我得到:
id status user location
15 checked-out 1 4<-this
16 checked-out 1 4
當我想:
id status user location
15 checked-out 1 7<-this
16 checked-out 1 4
這裏是asset_checkouts表,我想的值是 「7」;對應於資產15的最大(時間)的值。
id user asset time location
3 1 15 7/30/12 12:29 4
14 1 15 7/31/12 11:01 7
我的想法是,我將需要做一個子選擇,但我不知道這樣做的最佳方式。
你可以發佈你的表模式,一些示例數據,你期望的結果集是什麼? – 2012-07-31 16:36:08
我重新格式化了表模式和結果集,以使它們更易於閱讀。 – Brandon 2012-07-31 16:46:55
首先,您應該避免選擇不在「GROUP BY」子句中的裸列;應始終使用[聚合函數](http://dev.mysql.com/doc/refman/5.6/en/group-by-functions.html)處理它們。否則,MySQL只會給你一個組中的該列的隨機值!其次,您的問題似乎是[獲得每組最多N行](http://stackoverflow.com/questions/tagged/greatest-n-per-group)問題的變體。看看那些相關的問題。 – 2012-07-31 18:43:41