Есть БД, в которой хрянятся записи о товарах и тех, кто им торгует.
Во-первых, состояние товара может изменяться со временем, поэтому структура таблицы с описанием его примерно такая:
CREATE TABLE description (id, fk, since TIMESTAMP, остальные поля, UNIQUE(fk, since));
Нужно уметь выбирать самую новую запись. Сделал так:
SELECT * FROM description d WHERE since >= ALL(SELECT since FROM description d2 WHERE d2.fk = d.fk);
оно-то работает, но выглядит некрасиво. Эдакое недосамообъединение. Как сделать по-человечески?
Данные о продавцах хранятся примерно так:
CREATE TABLE term (id, fk, since TIMESTAMP, agent, price DECIMAL NULL, url, UNIQUE(fk, since));
Я сделал view тем же методом, что выше, чтобы для каждого агента оставить его последнюю цену — если он еще торгует данным товаром. А вот теперь хочется отобразить в интерфейсе примерно следующее (для каждого FK): «Цена: от 123 (Пупкин и К°) до 456 (Олигархъ Ltd.)» Как бы сие сделать? Если у двоих агентов одна и та же цена, можно выбрать любого. Например, того, чья запись появилась раньше.