как заменить limit в подзапросе ?

olegt2009
Дата: 14.01.2013 20:53:22
Коллеги, подскажите как решить задачу без неработающего limit в подзапросе ?

Нужно объединить две таблицы по полю одному ca_id (таблица ca первая и ca_fp вторая в объединении), НО при этом
из таблицы ca_fp выбрать только одну запись по общему в таблицах полю ca_id
но с ближащей максимальной датой указанной в запросе
если бы можно было писать Limit в подзапросе, то все было бы просто, но к сожалению он не работает ...

SELECT *
FROM ca
LEFT JOIN
ca_fp
ON ca.ca_id = ca_fp.ca_id
AND ca_fp.ca_fp_id in (SELECT ca_fp_id
FROM ca_fp
WHERE add_date <= '2013-01-11'
ORDER BY add_date DESC limit 1)

как можно переписать этот запрос без limit ?

Заранее спасибо всем откликнувшимся ...

структура таблиц ниже

CREATE TABLE ca (
ca_id int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (ca_id)
);

INSERT INTO ca (ca_id) VALUES(1);
INSERT INTO ca (ca_id) VALUES(2);
INSERT INTO ca (ca_id) VALUES(3);

CREATE TABLE ca_fp (
ca_fp_id int(11) NOT NULL AUTO_INCREMENT,
ca_id int(11) DEFAULT NULL,
budget float DEFAULT NULL,
add_date timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (ca_fp_id)
);

INSERT INTO ca_fp (ca_fp_id, ca_id, budget, add_date) VALUES(1, 1, 11, '2012-11-12 00:00:00');
INSERT INTO ca_fp (ca_fp_id, ca_id, budget, add_date) VALUES(2, 1, 22, '2012-11-13 00:00:00');
INSERT INTO ca_fp (ca_fp_id, ca_id, budget, add_date) VALUES(3, 2, 22, '2012-11-13 16:00:00');
INSERT INTO ca_fp (ca_fp_id, ca_id, budget, add_date) VALUES(4, 3, 44, '2012-11-11 16:01:13');
INSERT INTO ca_fp (ca_fp_id, ca_id, budget, add_date) VALUES(5, 3, 33, '2012-11-13 16:01:54');
javajdbc
Дата: 14.01.2013 21:11:36
olegt2009,

SELECT * 
FROM ca
LEFT JOIN
( 
SELECT *
FROM ca_fp,
(
SELECT ca_id ca_id2, MAX(add_date) max_date
FROM ca_fp
WHERE add_date < '2012-12-12'
GROUP BY ca_id
) zz
WHERE ca_fp.ca_id = zz.ca_id2
AND ca_fp.add_date = zz.max_date
) z2 ON z2.ca_id = ca.ca_id  
javajdbc
Дата: 14.01.2013 21:12:32
...еше посмотрите ФАК топик на тему выборки
первой последней записи в групе.