2012-05-11 2 views
0

Я использую mysql, у меня есть таблица A, в которой есть информация об учетной записи и таблица B, в которой есть демографическая информация, такая как дата рождения, адрес и информация о страховом полисе (первичная, вторичная). Страхование Table B feilds обновляется, поэтому я хочу получить последние данные из таблицы B.Table B не имеет никакой даты. Итак, как мне получить самую последнюю запись из B, которая должна быть соединена с A позже.Самая последняя запись в левом соединении

select 
    A.num, 
    A.openingamount, 
    A.action, 
    A.current_status, 
    B.dob, 
    B.primary_policy, 
    B.secondary_policy 
from A 
left outer join B 
    on (B.uniqueid = A.ponum) 
where A.num ='123' 
+1

В таблице B есть столбец с автоматическим приращением? если у вас нет даты и нет добавочного номера, вы не сможете найти последнюю строку. –

+0

нет автоматического увеличения и рядом с чем означает #t? пожалуйста, дополните. Столбец приращения – sweety

+0

означает, что новые записи автоматически получают самый высокий идентификатор. Если последняя запись имеет идентификатор 3, то новая запись будет иметь идентификатор 4. –

ответ

0

Если вы не имеете столбец даты, вам необходимо столбец инкремента:

select 
    A.num, 
    A.openingamount, 
    A.action, 
    A.current_status, 
    B.dob, 
    B.primary_policy, 
    B.secondary_policy 
from A 
left outer join B 
    on (B.uniqueid = A.ponum) 
where A.num ='123' 
order by B.increment_id desc 
0

Вы также можете добавить поле TIMESTAMP автоматического обновляемый -

ALTER TABLE B 
    ADD COLUMN ts 
    TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP; 

Automatic Initialization and Updating for TIMESTAMP.

Затем используйте это поле, чтобы найти самую последнюю запись.

0

juergen d является правильным в комментарии eir выше, заявив, что вам нужно некоторая упорядоченная колонка в таблице B, чтобы определить, что является последним. Если B.uniqueid является автоинкрементным столбцом, вы можете использовать его; если это не так, вам нужно будет добавить новый столбец для заказа B.

Затем вы можете получить данные с двойным соединением в B, где второе соединение используется для поиска B строк которые больше, чем максимальные uniqueid (т.е. найти ничего).

SELECT 
    A.num, A.openingamount, A.action, A.current_status, 
    B.dob, B.primary_policy, B.secondary_policy 
FROM A 
    LEFT JOIN B ON (B.a_ponum = A.ponum) 
    LEFT JOIN B2 ON (B2.a_ponum = A.ponum AND B2.uniqueid > B.uniqueid) 
WHERE 
    B2.uniqueid IS NULL 
    AND A.num ='123'