Mysql выберите группировку - PullRequest
0 голосов
/ 16 сентября 2009

У меня есть две таблицы, мне нужно выбрать данные из TABLE_A и TABLE_B; они имеют отношения один ко многим.

В моем утверждении select я часто получаю несколько уникальных результатов из TABLE_A, и это нормально. Но я также получу несколько совпадений в TABLE_B - мне нужно получить самую последнюю запись TABLE_B, которая соответствует. У меня есть тэг id с автоматическим увеличением.

Вот более подробный пример:

TABLE_A

TABLE_A_id  data
-----------------------------
1           something    
2           somethignelse    
3           yetagainsomething

TABLE_B

TABLE_B_id  TABLE_A_id  data
------------------------------------
1           1           filler_data1
2           1           filler_data1
3           1           filler_data3
4           2           filler_data4
5           2           filler_data5
6           3           filler_data1

Мне нужно выбрать данные так, чтобы мой возвращаемый массив был чем-то вроде этого для поиска по строкам, содержащим "filler_data1":

`TABLE_A_id` = 1, something, `TABLE_B_id` = 2, filler_data1

`TABLE_A_id` = 3, yetagainsomething, `TABLE_B_id` = 6, filler_data1

Таким образом, в вышеприведенном случае я получаю данные TABLE_B, которые являются самыми последними, то есть TABLE_B_id = 2 и соответствуют поиску "filler_data1".

Ответы [ 2 ]

1 голос
/ 16 сентября 2009

Это вопрос «наибольшее число запросов на группу», который возникает несколько раз в неделю в StackOverflow.

SELECT A.*, B1.*
FROM TABLE_A A
JOIN TABLE_B B1 ON (A.A_ID = B1.A_ID)
LEFT OUTER JOIN TABLE_B B2 ON (A.A_ID = B2.A_ID AND B1.B_ID < B2.B_ID)
WHERE B2.B_ID IS NULL;
0 голосов
/ 16 сентября 2009

Один из подходов, которые я использовал в прошлом, - это создать представление table_b, которое содержит самую актуальную информацию, а затем присоединить table_a к этому. Дело в точке. У нас есть система отслеживания инцидентов. Одна таблица содержит все постоянные данные, связанные с инцидентом, table_a. Вторая таблица, table_b, действует как таблица аудита и отслеживает обновления инцидента. Я создал представление о последних обновлениях для каждого конкретного инцидента, я использую это представление для различных отчетов, но я могу присоединить эту таблицу к своей таблице table_a, чтобы получить результаты, которые дают самую последнюю информацию об инциденте.

...