OK、これが私の SQL で、MySQL を使用しています。
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;
問題は、ユーザーと場所の列が、その資産の max(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の max(time) に対応する値。
id user asset time location
3 1 15 7/30/12 12:29 4
14 1 15 7/31/12 11:01 7
私の考えでは、サブセレクトを行う必要がありますが、最善の方法がわかりません。