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

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

Помогите составить запрос на 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


Наверх

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