C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
SQL запрос, Помогите
** avtoritet
Отправлено: 11.11.2005, 05:07


Не зарегистрирован







Почти нечерта не шарю в sql, а запрос нужно составить обязательно. Помоите кто может! Заранее благодарен.

Вообщем надо следущее.
Иеем две таблицы:
1) chel (id autoincrement primary fey, fio char 100)
2) result(id int, sum int, datein datetime)
- поле id — этл ключевое поле, связывающее две таблицы.
Надо получить все из первой таблицы (это не проблема) , при этом подчинить вторую по ключевому полю. Это у меня получается. Но надо сделать так, чтобы в случае, если на одну запись из первой таблицы имеется во второй 2,3, ... записи, выбрать максмимальную из них по дате.
Еще раз, спасибо!
AVC
Отправлено: 11.11.2005, 11:22


Ветеран

Группа: Модератор
Сообщений: 1583



КАКОЙ СЕРВЕР???
Типа так
Вариант для случай, когда у каждой родительской записи обязательно есть дочерние и у них пары ID,DateIn уникальны
CODE

Select *
From
 T0
,T1
,( Select ID, Max (DateIn) as MDateIn
   From t1
   Group by ID
) t2
Where 1 = 1
 and t1.ID = t2.ID
 and t1.DateIn = t2.MDateIn
 and t0.ID = t1.ID

Для случаев, когда у родительской нет дочерниих или есть несколько с одинаковыми DateIn запрос надо слегка переделать.
** avtoritet
Отправлено: 11.11.2005, 20:14


Не зарегистрирован







Сервер mysql!
AVT, я не улавливаю суть в твоем запросе, просто я в sql как свинья в живописи.
Предположим это перва ятаблица:
----------------
id | fio |
----------------
1 | Pushkin
2 | Ivanov
3 | Petrov
----------------

А это вторая:
---------------------------------------
id | sum | datein |
---------------------------------------
1 | 150 | 11/11/05 4: 05 |
1 | 120 | 11/11/05 4:45 |
3 | 100 | 11/11/o5 19:10 |
---------------------------------------

А получить в итоге надо следущее:
-------------------------------------------------------------
id | fio | sum | datein |
-------------------------------------------------------------
1 | Pushkin| 120 |11/11/05 4:45 |
3 | Petrov | 100 |11/11/05 19:10 |
-------------------------------------------------------------


Всем спасибо!











AVC
Отправлено: 14.11.2005, 15:43


Ветеран

Группа: Модератор
Сообщений: 1583



QUOTE (** avtoritet @ 11/11/2005, 19:14)
Сервер mysql!
AVT, я не улавливаю суть в твоем запросе

Мой ник пишется иначе.
Запрос решает проблемму именно в вашей постановке и делает он это так:
Подзапрос T2 находит для каждого ID максимальную дату.
Затем из T1 выбираются те строки, которые попали в T2 (разворачивается информация по нужным записям)
И наконец результат дополняется информацией из T0.
Вот вариант, проверенный на mysql
CODE

Select
 t0.*
,t1.*
From
 T0
,T1
,( Select t1.ID, max(t1.DateIn) as MDateIn
   From t1
   Group by t1.ID
) t2
Where 1 = 1
and t1.ID = t2.ID
and t1.DateIn = t2.MDateIn
and t0.ID = t1.ID
** avtoritet
Отправлено: 14.11.2005, 17:42


Не зарегистрирован







извиняюсь AVC, попутал немного!
Вот теперь, после твоего пояснения, понял что к чему. Спасибо!

Вернуться в Работа с базами данных в C++Builder