![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите составить запрос на Oracle [D5]
vlgrig1961 © (2004-06-23 08:25:00)Здравствуйте уважаемые знатоки Оракла.
Помоги составить SQL запрос:
есть таблица с разными датами, надо выбрать по одной записи
на дату <= текущей (т.е. последние данные)
Nomer Data Summa
------ ------ ------
1 01.01.04 100
1 11.01.04 150
1 02.02.04 350
2 20.01.04 500
2 28.02.04 600
3 31.12.03 1560
3 01.02.04 2300
Выбрать на дату <= 01.02.04
1 11.01.04 150
2 20.01.04 500
3 01.02.04 2300
Можно ли такое сделать ?
Sergey13 (2004-06-23 10:42:00) [1]Мой первый пост - фигня. Поторопился в знатоки. 8-)
select t1.* from test t1,
(select nomer,max(data) data
from test
where data<=to_date('01.02.04')
group by nomer) t2
where t1.nomer=t2.nomer and t1.data=t2.data
В принципе очень похоже на [2], но статистика (без индексов) вроде чуть лучше.
2Жук © (23.06.04 10:19) [4]
>А если записей с макс.датой больше 1 ?
Значит будет больше 1. 8-)
Johnmen (2004-06-23 10:33:00) [2]>Жук © (23.06.04 10:19) [4]
>А если записей с макс.датой больше 1 ?
Ну, естественно, и получим больше 1. Что не противоречит постановке вопроса...
:)
Но телепатически вдумавшись в вопрос, предполагаю, что не может быть более 1 платежа за дату.
Жук (2004-06-23 10:19:00) [3]
> Johnmen © (23.06.04 09:37) [2]
А если записей с макс.датой больше 1 ?
asp (2004-06-23 09:41:00) [4]Что значит "по одной записи"? По одной в каком наборе (nomer, data, summa)?
Johnmen (2004-06-23 09:37:00) [5]
SELECT * FROM Table T1
WHERE T1.Date=(SELECT MAX(T2.Date) FROM Table T2 WHERE (T1.Nomer=T2.Nomer) AND (T2.Date<=01.02.04)
Sergey13 (2004-06-23 08:38:00) [6]select nomer,summa,min(sysdate-data)
from table
group by 1,2