Просто добавьте высоту к вашему .column-header
.column-stack ul .column-header {
height:80px;
}
, и это будет правильно выровнено
Я думаю, что необходимо сделать другое соединение для получения макс. val ab для каждого a.id сначала.
Что-то вроде этого:
select a.*
from a
left join (
select aid, max(val) as val
from ab
group by aid
) abmax on abmax.aid=a.id
inner join ab on ab.aid=abmax.aid and ab.val=abmax.val
inner join b on b.id=ab.bid
where b.val='foo'
Я часто использую следующий прием для получения самого большого на группу:
SELECT a.*
FROM ab AS ab1
LEFT OUTER JOIN ab AS ab2 ON (ab1.aid = ab2.aid AND ab1.val < ab2.val)
JOIN a ON (ab1.aid = a.id)
JOIN b ON (ab1.bid = b.id)
WHERE ab2.aid IS NULL
AND b.val = 'foo';
Прием должен соединить с таблицей AB к себе во внешнем объединении. Возвратите ab1, где никакие строки не существуют с тем же значением для помощи и большим значением для val. Поэтому ab1 имеет самый большой val на группу строк с данным значением для помощи.
Вот иначе, что я просто проверил:
select a.*
from ab
inner join b on(ab.bid=b.id)
inner join a on (ab.aid=a.id)
where ab.val = (select max(val) from ab AS ab2 where ab2.aid = ab.aid)
and b.val='foo'
SELECT *
FROM
(
SELECT
A.*,
(SELECT top 1 AB.BID FROM AB WHERE A.AID = AB.AID ORDER BY AB.val desc) as BID
FROM A
) as Aplus
JOIN B ON Aplus.BID = B.BID
Я не уверен, какой sql Вы используете, но в MS SQL я создаю табличную функцию базы данных для возвращения макс. значений от таблицы A, затем соединяют это с таблицей B. Я нахожу это намного легче понять, чем сложные соединения, когда я оглядываюсь назад на свои запросы на более позднем этапе.