Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

SQL Запрос [IB6.x]


Страницы:   1 2

REA ©   (2005-02-10 11:26:00) 

Добрый день. Помогите плз составить SQL запросик:
Есть таблица T1 с полем N:
N
1
2
3
и таблица T2 c полями N, Time, X1
N Time   X1
1 13:00  aaa
1 14:00  bbb
2 12:00  ccc
2 15:00  ddd

Нужно получить максимальное время для каждого N:
1 14:00 bbb
2 15:00 ddd
Если будет и "3, NULL, NULL" то тоже пойдет


Johnmen   (2005-02-10 12:16:00) [21]

>А если писать в виде таблица.поле?

Если не хочешь неоднозначностей (которые ты понимаешь так, а парсер по-другому), всегда алиастаблицы.поле


REA   (2005-02-10 12:07:00) [22]

В таком виде (без T1.N=T2.N) тоже работает:
... where Tankslog.logTime = (select max(Tankslog.logTime) from Tankslog where Tankslog.tankno = Tanks.tankno)

>Чтобы однозначно определять, из какой таблицы указываемое поле.

А если писать в виде таблица.поле? Если таблица не указана, значит такое поле только в одно таблице.

И еще: что лучше использовать SELECT FROM SELECT MAX() или JOIN?


Johnmen   (2005-02-10 12:03:00) [23]

>А зачем, если не секрет?

Чтобы однозначно определять, из какой таблицы указываемое поле.


ЮЮ   (2005-02-10 12:03:00) [24]

С помощью одного SQL-запроса можно получить только
1 14:00
2 15:00
Для получения требуемого надо соединить это результ с таблицей.
Т.к. в IB нет механизма подзапросов, то, ИМХО, - одним запросом - нельзя


Sergey13   (2005-02-10 12:02:00) [25]

2[7] REA   (10.02.05 11:57)
>В виде из 2 работает, но настораживает что есть два сравнения T1.N=T2.N
Где? Есть T1.N=T2.N и T1.N=TT.N -это разные вещи. TT<>T2.


REA   (2005-02-10 11:58:00) [26]

>Везде используй псевдонимы таблиц

А зачем, если не секрет?


REA   (2005-02-10 11:57:00) [27]

В виде из 2 работает, но настораживает что есть два сравнения T1.N=T2.N
И первая таблица пожалуй тоже нужна - допустим там есть еще поле T1X, которое надо возвратить в запросе.


Sergey13   (2005-02-10 11:54:00) [28]

2[3] Александр Иванов ©   (10.02.05 11:47)
Чтобы не выводилось несколько одинаковых из второй. Может я и ошибаюсь.


Johnmen   (2005-02-10 11:53:00) [29]

>REA   (10.02.05 11:51) [4]

Везде используй псевдонимы таблиц !


REA   (2005-02-10 11:51:00) [30]

Че то не получается. Запрос не выполняется, а если пошаманить, то возвращает одну запись. Переписал [1] для реальных таблиц в таком виде (не работает):

select tankslog.tankno, tankslog.logtime from tankslog
where logtime = (select max(tt.logtime) from tankslog as tt where tankslog.tankno = tt.tankno)


Александр Иванов   (2005-02-10 11:47:00) [31]

Sergey13 ©   (10.02.05 11:44) [2]
А зачем использовать 1-ю таблицу вообще? :)


Sergey13   (2005-02-10 11:44:00) [32]

Или вот так
select T1.N, T2.Time, T2.X1
from T1,T2
where T1.N=T2.N and
T2.Time = (select max(tt.Time) from T2 as tt where TT.N = T1.N)


Александр Иванов   (2005-02-10 11:37:00) [33]

Вот так попробуй:
select T2.N, T2.Time, T2.X1 from T2
where Time = (select max(tt.Time) from T2 as tt where T2.N = tt.N)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо