![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
SQL Запрос [IB6.x]
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)