|
|
|
| есть таблица, в которой некоторые строки дублируются главным полем OPISANIE, эти строки главным образом отличаются полем дата.
нужно по запросу создать таблицу (b), отобрав в нее строки из исходной таблицы (a) по тексту который входит в поле OPISANIE ( т.е. where opisanie like '%ххххххх%') и с датой, которая выше, чем у строк с одинаковым (дублирующимся) полем OPISANIE ..
т.е. получившаяся таблица должна содержать строки с уникальными полями OPISANIE.
помогите пожалуйста составить грамотный запрос.
спасибо! | |
|
|
|
|
|
|
|
для: boa
(27.09.2007 в 11:19)
| | Как-то так видимо:
CREATE TABLE emp_copy AS SELECT emp.*
FROM emp,
(SELECT MAX (hiredate) maxdate
FROM emp
WHERE job LIKE '%MANAGER%') t
WHERE emp.hiredate = t.maxdate AND job LIKE '%MANAGER%';
|
Вместо тестовых названий полей и таблиц подставь свои :) | |
|
|
|
|
|
|
|
для: oradev
(27.09.2007 в 13:10)
| | что значит t ? .........'%MANAGER%') t | |
|
|
|
|
|
|
|
для: boa
(27.09.2007 в 13:24)
| | Это псевдоним таблицы :) не получается что-то ? | |
|
|
|
|
|
|
|
для: oradev
(27.09.2007 в 13:34)
| | получается (хотя я еще не проверил правильно ли), уже понял это псевдоним той таблицы в виде запроса...
а AS можно опустить до псевдонима..? | |
|
|
|
|
|
|
|
для: boa
(27.09.2007 в 14:16)
| | Ну, можно и с AS можно и без :))) | |
|
|
|
|
|
|
|
для: oradev
(27.09.2007 в 14:21)
| | не, такой запрос не делает то, что надо..
он не добавляет строки с меньшей датой, даже если у них нет дубликатов, а это надо..
уточню:
нужно чтобы не добавлялись только те строки которые являются дубликатами с меньшей датой
этот запрос вывел только строки с самой высокой датой не выводя их дубликаты....
а те строки что уникальны сами по себе и у них нет дубликатов, но дата меньше самой высокой, не вывел, а надо.. | |
|
|
|
|
|
|
|
для: boa
(27.09.2007 в 14:57)
| | ну а как вы хотели, партизанам помогать сложно!
Цитирую: них нет дубликатов, но дата меньше самой высокой, не вывел, а надо..
Какой еще такой самой высокой даты - среди чего ? | |
|
|
|
|
|
|
|
для: oradev
(27.09.2007 в 15:48)
| | про партизанов я не осилил..
попробую объяснить подробнее (возможно я был краток):
есть таблица с несколькими колонками - среди них интересующие нас 2 колнки ( opisanie, data )
opisanie - главная колонка, data как-бы уточняющая колонка...
поля в колонке opisanie иногда дублируются, но у дублей разные даты..
есть поля которые не дублируются...
в результате нужно получить строки которые включают в себя уникальные поля из колнки opisanie (которые не имеют дублей, не учитывая какая у них data), и поля которые имеют дубликаты, но нужно вывести только те из них, которые имеют последнюю дату..
вот.. | |
|
|
|
|
|
|
|
для: boa
(27.09.2007 в 16:03)
| | Это имеете ввиду ?
select deptno, max(hiredate)
from emp
group by deptno;
|
| |
|
|
|
|
|
|
|
для: oradev
(27.09.2007 в 16:43)
| | да, похоже получается, но алгоритм выборки чуть не такой как хотелось-бы :), т.е. я подразумевал, что будет так...
он находит дубликат - какой попался первый по пути, потом сравнивая поля, найдя следующий дубликат и сравнив дату выбирает наибольшую дату и сохраняет ее в поле max(hiredate), хотя на самом деле в таблице на "выходе" остается дубликат с первой попавшейся датой, впринципе так тоже подходит, в итоге результат то что нужен... СПАСИБО!
а в принципе, сложно сделать запрос чтобы в результате на "выходе" был дубликат с наивысшей датой..?
надеюсь понятно, что я имел в виду :) | |
|
|
|
|
|
|
|
для: boa
(27.09.2007 в 17:29)
| | елки маталки...
я этот запрос вчера делал, но мне показалось, что итог не правильный...
вот блин...
но все равно спасибо! | |
|
|
|