Сортировка данных из объединения в хронологическом порядке для получения самой последней записи - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть 3 таблицы базы данных:

  • OpenROHeader
  • OpenROData
  • OpenRONotes

Заголовок и данные обновляются (перезаписываются)каждый час, пока заметки добавляются вручную и связываются через поле «RO_Number»

Что я хочу, чтобы SQL делал, это извлекал самые последние «Заметки» (по дате «date_updated»)

SELECT file_date, rod.id as id, key_id, key_name, key_value, DATE_FORMAT(expected_close_date , '%d/%m/%y' ) as expected_close_date, wty_dept
FROM OpenROHeader roh 
JOIN OpenROData rod ON roh.id=rod.header_id 
LEFT JOIN OpenRONotes ron ON rod.key_value=ron.ro_number 
WHERE roh.customer_id='193' 
GROUP BY key_id, key_name

В таблице Notes есть 2 записи - я хочу самые последние:

id, customer_id, ro_number, expected_close_date, advisor_notes, wty_dept, date_updated
4059, 193, 'S117986', NULL, 'WTY_ON<br>- S.W.', 'on', '2018-09-24 05:02:45'
4060, 193, 'S117986', NULL, 'WTY_OFF<br>- S.A.', NULL, '2018-09-24 05:03:24'

Я хочу, чтобы он возвращал данные (последние 2 столбца) в SELECT из строки с идентификатором 4060 NOT 4059

http://sqlfiddle.com/#!9/f00326/1/0

Но вместо того, чтобы возвращать самый последний 'wty_dept' (NULL) с 2018-09-24 05: 03: 24

Мой SQL-оператор возвращает предыдущую запись 'on' с 2018-09-24 05:02:45 (старше)

Как отсортировать объединение, чтобы получить самые последние данные

Ответы [ 3 ]

0 голосов
/ 24 сентября 2018

поставить desc после группы по clouse, например - SELECT * из студента в разделе GROUP BY desc;это будет

0 голосов
/ 24 сентября 2018

Самый последний столбец можно получить из объединения трех таблиц следующим образом:

SELECT file_date, rod_id AS id, key_id, key_name, key_value, DATE_FORMAT(expected_close_date , '%d/%m/%y' ) AS expected_close_date, wty_dept
FROM OpenROHeader roh
RIGHT OUTER JOIN 
(SELECT rod.id rod_id ,key_id,key_name ,key_value ,expected_close_date ,wty_dept ,header_id,date_updated
FROM OpenROData rod
RIGHT OUTER JOIN OpenRONotes ron 
ON rod.key_value=ron.ro_number 
ORDER BY ron.date_updated ) tab 
ON roh.id=header_id WHERE 1=1 AND
roh.customer_id='193'
ORDER BY date_updated DESC LIMIT 1;

Приведенный выше запрос вернул самые последние записи со столбцом wty_dept, равным NULL.Проверьте это и наслаждайтесь кодированием :) !!

0 голосов
/ 24 сентября 2018

Я не думаю, что вам нужно сортировать, просто убедитесь, что нет более позднего комментария.Я сделал предположения о том, как мы ищем записи, но, если я правильно понял, это должно сделать для вас (ОБНОВЛЕНО после того, как я думаю, что понял ваши требования!)

SELECT file_date, advisor_notes, rod.id as id, key_id, key_name, key_value, DATE_FORMAT(expected_close_date , '%d/%m/%y' ) as expected_close_date, wty_dept
FROM OpenROHeader roh 
JOIN OpenROData rod ON roh.id=rod.header_id 
LEFT JOIN OpenRONotes ron ON rod.key_value=ron.ro_number 
WHERE roh.customer_id='193' 
and not exists (select * from OpenRONotes ron2 where rod.key_value=ron2.ro_number and ron2.date_updated>ron.date_updated)
...