-
Из базы данных выбираем данные: из Table1 поле Docum, из Table2 - поле Date, Table3 - поле Versiya. Получается следующая таблица: [B] Docum[/B] [B] Date[/B] [B]Versiya [/B] Doc_1 31/01/08 1 Doc_1 01/02/08 2 Doc_1 3 Doc_2 06/01/08 1 Doc_2 2 Doc_3 12/05/08 1 Задача следующая: для каждого из Doc1,Doc2,...выбираем строку с последней версией(для Doc1-Versiya3,для Doc2-Versiya2,для Doc3-Versiya1) и проверяем не пусто ли поле Date в этой строке, если пусто, то переходим к предыдущей версии и так пока не найдем заполненое поле. Проблема уже начинается с того, что не знаю как осуществить выборку элементов Doc_i
-
> Из базы данных выбираем данные
Каким образом?
-
select Docum,Date,Versiya from Table1 left join Table2 on Table2.doc_id = Table1.doc_id left join Table3 on Table3.ver_id = Table2.ver_id
-
while not DataSet.Eof do begin ... end;
-
Я знаю как задавать цикл, я не знаю как как осуществить выборку элементов Doc_i в столбце Docum, если эти элементы повторяются
-
Я знаю как задавать цикл Зачем тогда вопрос про цикл?
а выборку ты уже сделал селектом.
-
Если принять, что номера версий возрастают с возрастанием даты (для упрощения запроса), то: SELECT Docum,MAX(SuperDate),MAX(Versiya) FROM Table1 LEFT JOIN Table2 ON Table2.doc_id = Table1.doc_id LEFT JOIN Table3 ON Table3.ver_id = Table2.ver_id WHERE SuperDate IS NOT NULL GROUP BY Docum
PS Зарезервированными словами не стОит называть свои объекты. В данном случае поля.
-
> [0] Dagir © (01.09.08 09:54) > из Table1 поле Docum, из Table2 - поле Date, Table3 - поле Versiya. А к чему относится дата? Если к документу или версии, ИМХО странно держать ее в отдельной таблице.
-
> [6]
И LEFT JOIN логичнее заменить на INNER JOIN
|