2013-02-27 2 views
0

У меня есть три таблицы.Узнать дату достижения общей суммы

Свойства

property_id 

Бронирование:

reservation_id 
reservation_property_id 
reservation_date 

Платежи

payment_id 
payment_reservation_id 
payment_amount 

Оговорка может ч ave многие платежи, связанные с ним, и имущество может иметь много оговорок.

Что я пытаюсь выяснить, как это сделать, это узнать дату бронирования, в которой каждая собственность достигла 500 фунтов стерлингов.

Поэтому я должен разработать совокупную сумму сумм платежей и узнать дату, когда был достигнут порог в 500 фунтов стерлингов за каждое имущество.

Надеюсь, это имеет смысл.

Заранее за вашу помощь.

+0

Я не уверен, что это то, что вы сделали бы в SQL. Похоже на то, что лучше подходит для вашего языка на стороне сервера. –

ответ

0

Пожалуйста, попробуйте с этим один:

SELECT reservation_property_id, MIN(reservation_date) 
FROM (SELECT IF(@prevProperty != q.reservation_property_id, 
       @runningtotal:=0, 
       @runningtotal:[email protected] + 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 

Я не присоединиться к таблице свойств, хотя, из удобства :)

Идея в основном только рассчитать текущую сумму платежи по таблице, упорядоченные по собственности и дате. Во внешнем запросе просто выберите минимальную дату, когда общая сумма равна или больше порогового значения.

Смежные вопросы