Я пытаюсь написать отчет, который присоединится к человеку, его работе и их почасовой оплате во время работы. Кажется, я не могу найти лучший способ присоединиться к стоимости человека, когда дата меньше даты работы.MySQL - Как мне соединить сортировку объединенных данных?
Скажем, человек стоит $ 30 в час в начале года, то получил рейз $ 10 O 5 февраля, а другой на Мар 1.
- 01/01/2010 $ 30,00 (в час)
- 02/05/2010 $ 40,00
- 03/01/2010 $ 45,00
Люди положить в часах нескольких дней, которые охватывают rasies.
- 01/05/2010 10 часов (должно быть на уровне $ 30/час)
- 01/27/2010 5 часов (снова на $ 30)
- 02/10/2010 10 часов (при $ 40/ч)
- 03/03/2010 5 часов (при $ 45/час)
Я пытаюсь написать один SQL заявление, которое будет тянуть часы, стоимость за час, и часы * стоимость. Стоимость почасовой ставки последней введенной в систему, поэтому дата стоимость меньше, чем дата работы, упорядочены по дате предела стоимости 1.
SELECT person.id, person.name, work.hours, person_costs.value,
work.hours * person_costs.value AS value
FROM person
JOIN work ON person.id = work.person_id
JOIN person_costs ON person.id = person_costs.person_id
AND person_costs.date < work.date
WHERE person.id = 1234
ORDER BY work.date ASC
проблема у меня, то person_costs не заказан даты в порядке убывания. Он вытаскивает «любое» значение (естественно отсортированное по позиции записи), которое соответствует условию. Как выбрать первое значение person_cost, которое старше даты работы?
Спасибо!
Это решение будет работать наилучшим образом для меня, поскольку запрос будет быстрее, чем вспомогательный запрос (зацикливая миллионы записей в ночное время). Построение CRUD для person_cost было более сложным со всеми краями, но оно того стоило. – Gary