0

私は3つのテーブルを持っています。

プロパティ

property_id

予約:

reservation_id
reservation_property_id
reservation_date

支払い

payment_id
payment_reservation_id
payment_amount

予約には多くの支払いを関連付けることができ、プロパティには多くの予約を含めることができます。

私がどのようにすればよいかを考えようとしているのは、各物件の収益が500ポンドに達した予約日を見つけることです。

したがって、支払い金額の累積合計を計算し、各プロパティのしきい値である500ポンドに達した日付を確認する必要があります。

うまくいけば、これは理にかなっています。

よろしくお願いします。

4

1 に答える 1

0

これを試してみてください:

SELECT reservation_property_id, MIN(reservation_date) 
FROM (SELECT IF(@prevProperty != q.reservation_property_id, 
                @runningtotal:=0, 
                @runningtotal:=@runningtotal + payment_amount) AS runningtotal,
             @prevProperty := q.reservation_property_id, q.*
      FROM (SELECT *
            FROM reservations r 
            INNER JOIN payments p 
                    ON p.payment_reservation_id = r.reservation_id 
                    /*not sure how your tables are linked*/
            , (SELECT @runningtotal:=0, @prevProperty:=0) vars
            ORDER BY r.reservation_property_id, reservation_date) q
      ) sq
WHERE runningtotal >= 500
GROUP BY reservation_property_id

ただし、便宜上、プロパティテーブルには参加しませんでした:)

アイデアは基本的に、プロパティと日付で並べ替えられたテーブルの支払いの現在の合計を計算することです。外側のクエリで、現在の合計がしきい値以上になる最小の日付を選択するだけです。

于 2013-02-27T16:18:54.287 に答える