Mysql Присоединиться с максимальной датой и первой строкой - PullRequest
0 голосов
/ 28 мая 2020

У меня есть 2 свойства таблиц и структура property_history что-то вроде этого

proerties -
id | property_address | owner 
1  | abc              | xyz
2  | 123              | efg

property_history- 

id | property_id |   date1    |   date2    |   date3    |    date4
1  | 1           | 2012-05-01 | 0000-00-00 | 2002-06-11 | 2006-06-11 |
2  | 1           | 2019-05-01 | 0000-00-00 | 2003-06-11 | 2007-06-11 |
3  | 1           | 0000-00-00 | 2011-06-11 | 2004-06-11 | 2011-06-11 |
4  | 1           | 0000-00-00 | 2020-01-31 | 2005-06-11 | 0000-00-11 |

Мне нужно объединить эти две таблицы как

  1. Все строки из таблицы свойств
  2. Только 1 строка истории свойств формы с самой последней датой из любого столбца даты в качестве последней даты, например. последняя дата между (date1, date2, date3, date4) как latest_date как один столбец
  3. Если у property_history нет строки с соответствующим идентификатором свойства, то latest_date должен быть нулевым

Ответы [ 2 ]

0 голосов
/ 29 мая 2020
SELECT properties.id, properties.parcel_id, properties.state, properties.county, properties.assessed_value, properties.in_same_zip, properties.in_same_state
FROM  properties left join (SELECT GREATEST(tax_history.date_paid_2nd_half_2,
     COALESCE(tax_history.date_paid_2nd_half_1, 0),
     COALESCE(tax_history.date_paid_1st_half_2, 0),
     COALESCE(tax_history.date_paid_1st_half_1, 0)) as latest_date, property_id from tax_history) as tax_history ON tax_history.property_id = properties.id
This query is working but it is very slow, I have thousands of records
0 голосов
/ 28 мая 2020

Попробуйте этот запрос

Select proerties.id,proerties.property_address,proerties.owner from proerties 
left join ( Select Case when date(date1)>=date(date2) and date(date1)>=date(date3) and date(date1)>=date(date4) then date1 when date(date2)>=date(date1) and date(date2)>=date(date3) and date(date2)>=date(date4) then date2  when date(date3)>=date(date1) and date(date3)>=date(date2) and date(date3)>=date(date4) then date3  when date(date4)>=date(date1) and date(date4)>=date(date2) and date(date4)>=date(date3) then date3 END AS max_date,property_id  from property_history) as update_history on update_history.property_id=proerties.id

И дайте мне знать, получаете ли вы ожидаемый результат или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...