Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Таблица с уникальными полями
 
 автор: boa   (27.09.2007 в 11:19)   письмо автору
 
 

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

нужно по запросу создать таблицу (b), отобрав в нее строки из исходной таблицы (a) по тексту который входит в поле OPISANIE ( т.е. where opisanie like '%ххххххх%') и с датой, которая выше, чем у строк с одинаковым (дублирующимся) полем OPISANIE ..

т.е. получившаяся таблица должна содержать строки с уникальными полями OPISANIE.

помогите пожалуйста составить грамотный запрос.
спасибо!

   
 
 автор: oradev   (27.09.2007 в 13:10)   письмо автору
 
   для: 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%';


Вместо тестовых названий полей и таблиц подставь свои :)

   
 
 автор: boa   (27.09.2007 в 13:24)   письмо автору
 
   для: oradev   (27.09.2007 в 13:10)
 

что значит t ? .........'%MANAGER%') t

   
 
 автор: oradev   (27.09.2007 в 13:34)   письмо автору
 
   для: boa   (27.09.2007 в 13:24)
 

Это псевдоним таблицы :) не получается что-то ?

   
 
 автор: boa   (27.09.2007 в 14:16)   письмо автору
 
   для: oradev   (27.09.2007 в 13:34)
 

получается (хотя я еще не проверил правильно ли), уже понял это псевдоним той таблицы в виде запроса...
а AS можно опустить до псевдонима..?

   
 
 автор: oradev   (27.09.2007 в 14:21)   письмо автору
 
   для: boa   (27.09.2007 в 14:16)
 

Ну, можно и с AS можно и без :)))

   
 
 автор: boa   (27.09.2007 в 14:57)   письмо автору
 
   для: oradev   (27.09.2007 в 14:21)
 

не, такой запрос не делает то, что надо..

он не добавляет строки с меньшей датой, даже если у них нет дубликатов, а это надо..

уточню:
нужно чтобы не добавлялись только те строки которые являются дубликатами с меньшей датой

этот запрос вывел только строки с самой высокой датой не выводя их дубликаты....

а те строки что уникальны сами по себе и у них нет дубликатов, но дата меньше самой высокой, не вывел, а надо..

   
 
 автор: oradev   (27.09.2007 в 15:48)   письмо автору
 
   для: boa   (27.09.2007 в 14:57)
 

ну а как вы хотели, партизанам помогать сложно!
Цитирую: них нет дубликатов, но дата меньше самой высокой, не вывел, а надо..
Какой еще такой самой высокой даты - среди чего ?

   
 
 автор: boa   (27.09.2007 в 16:03)   письмо автору
 
   для: oradev   (27.09.2007 в 15:48)
 

про партизанов я не осилил..

попробую объяснить подробнее (возможно я был краток):

есть таблица с несколькими колонками - среди них интересующие нас 2 колнки ( opisanie, data )

opisanie - главная колонка, data как-бы уточняющая колонка...
поля в колонке opisanie иногда дублируются, но у дублей разные даты..

есть поля которые не дублируются...

в результате нужно получить строки которые включают в себя уникальные поля из колнки opisanie (которые не имеют дублей, не учитывая какая у них data), и поля которые имеют дубликаты, но нужно вывести только те из них, которые имеют последнюю дату..

вот..

   
 
 автор: oradev   (27.09.2007 в 16:43)   письмо автору
 
   для: boa   (27.09.2007 в 16:03)
 

Это имеете ввиду ?

 select deptno, max(hiredate)
 from emp
 group by deptno;

   
 
 автор: boa   (27.09.2007 в 17:29)   письмо автору
 
   для: oradev   (27.09.2007 в 16:43)
 

да, похоже получается, но алгоритм выборки чуть не такой как хотелось-бы :), т.е. я подразумевал, что будет так...

он находит дубликат - какой попался первый по пути, потом сравнивая поля, найдя следующий дубликат и сравнив дату выбирает наибольшую дату и сохраняет ее в поле max(hiredate), хотя на самом деле в таблице на "выходе" остается дубликат с первой попавшейся датой, впринципе так тоже подходит, в итоге результат то что нужен... СПАСИБО!

а в принципе, сложно сделать запрос чтобы в результате на "выходе" был дубликат с наивысшей датой..?

надеюсь понятно, что я имел в виду :)

   
 
 автор: boa   (27.09.2007 в 17:34)   письмо автору
 
   для: boa   (27.09.2007 в 17:29)
 

елки маталки...
я этот запрос вчера делал, но мне показалось, что итог не правильный...
вот блин...

но все равно спасибо!

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования