Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите составить запрос 
:(
    Опции темы
EasyTask
Дата 13.4.2012, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 26.7.2010

Репутация: нет
Всего: нет



Имеются следующие данные:

create table TESTTABLE(  id NUMBER, unixtime number );

insert into TESTTABLE(id,unixtime) values(1,1327059335);
insert into TESTTABLE(id,unixtime) values(1,1327059334);
insert into TESTTABLE(id,unixtime) values(1,1327059333);
insert into TESTTABLE(id,unixtime) values(2,1327059332);
insert into TESTTABLE(id,unixtime) values(2,1327059331);
insert into TESTTABLE(id,unixtime) values(3,1327059330);

Напишите SQL Запрос(ы) которые удалят дубликаты по id и оставят те записи, у которых минимальное значение unixtime.
-----------------------------------------------------------------------------

Меня хватило лишь на следующий этап:
SELECT id, MIN( unixtime ) FROM TESTTABLE GROUP BY ID

Как теперь основываясь на этой выборке удалить остальные строки? Помогите пожалуйста.
PM MAIL   Вверх
Zloxa
Дата 13.4.2012, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Не уверен, что мася держит такой синтаксис, но сперва бы попробовал так
Код

delete from testable where (id,unixtime) not in (SELECT id, MIN( unixtime ) FROM TESTTABLE GROUP BY ID)

Потом - так

Код

delete from testable t 
join (SELECT id, MIN( unixtime ) unixtime FROM TESTTABLE GROUP BY ID) s
on s.id = t.id and s.unixtime != t.unixtime


Правда, если попадется null - работать не будет.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Akina
Дата 13.4.2012, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Цитата(Zloxa @  13.4.2012,  18:14 Найти цитируемый пост)
Не уверен, что мася держит такой синтаксис

Это не мася, у него нет такого типа данных.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
EasyTask
Дата 17.4.2012, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 26.7.2010

Репутация: нет
Всего: нет



Это MYSQL. Код не работает...
Ошибка:
can't specify target table 'TESTTABLE' for update in FROM clause
PM MAIL   Вверх
Akina
Дата 17.4.2012, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Цитата(EasyTask @  17.4.2012,  14:34 Найти цитируемый пост)
Это MYSQL. Код не работает...

Не вешайте нам лапшу на уши. В документации по MySQL тип данных NUMBER не значится. При попытке выполнить создание таблицы вышеприведённым кодом будет дано сообщение об ошибке.



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
EasyTask
Дата 17.4.2012, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 26.7.2010

Репутация: нет
Всего: нет



Замените на INTEGER и будет вам счастье. Задание - абстрактное. Не конкретная задача, а проблема вида "Как реализовать это на MySQL"
PM MAIL   Вверх
Akina
Дата 17.4.2012, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Цитата(EasyTask @  17.4.2012,  19:03 Найти цитируемый пост)
Замените на INTEGER и будет вам счастье. Задание - абстрактное. Не конкретная задача, а проблема вида "Как реализовать это на MySQL" 

Счастье искал не я. Так что в следующий раз сами, заранее, превращайте сферического коня в конкретное задание, внося необходимые корректировки.

Код

mysql> use test
Database changed
mysql> create table TESTTABLE(  id INT, unixtime INT);
Query OK, 0 rows affected (0.08 sec)

mysql>
mysql> insert into TESTTABLE(id,unixtime) values(1,1327059335);
Query OK, 1 row affected (0.06 sec)

mysql> insert into TESTTABLE(id,unixtime) values(1,1327059334);
Query OK, 1 row affected (0.00 sec)

mysql> insert into TESTTABLE(id,unixtime) values(1,1327059333);
Query OK, 1 row affected (0.02 sec)

mysql> insert into TESTTABLE(id,unixtime) values(2,1327059332);
Query OK, 1 row affected (0.00 sec)

mysql> insert into TESTTABLE(id,unixtime) values(2,1327059331);
Query OK, 1 row affected (0.02 sec)

mysql> insert into TESTTABLE(id,unixtime) values(3,1327059330);
Query OK, 1 row affected (0.00 sec)

mysql>
mysql> select * from testtable;
+------+------------+
| id   | unixtime   |
+------+------------+
|    1 | 1327059335 |
|    1 | 1327059334 |
|    1 | 1327059333 |
|    2 | 1327059332 |
|    2 | 1327059331 |
|    3 | 1327059330 |
+------+------------+
6 rows in set (0.00 sec)

mysql> delete t1.* from testtable t1, (select id,min(unixtime) ut from testtable group by id) t2 where t1.id=t2.id and t1.unixtime != t2.ut;
Query OK, 3 rows affected (0.05 sec)

mysql> select * from testtable;
+------+------------+
| id   | unixtime   |
+------+------------+
|    1 | 1327059333 |
|    2 | 1327059331 |
|    3 | 1327059330 |
+------+------------+
3 rows in set (0.00 sec)

mysql>



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
EasyTask
Дата 17.4.2012, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 26.7.2010

Репутация: нет
Всего: нет



Извиняюсь за резкий ответ smile Большое спасибо за помощь. Чуть позже протестю.
PM MAIL   Вверх
Akina
Дата 17.4.2012, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Гм... это же лог консоли - чего ещё тестить?

Добавлено через 1 минуту и 43 секунды
На всякий случай - версия сервера 5.5.8 GPL.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
JackGmen
Дата 11.5.2012, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 20.8.2011

Репутация: нет
Всего: нет



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

DELETE FROM `testtable` WHERE CONCAT(`id`,`unixtime`) NOT IN (SELECT CONCAT(`id`,MIN(`unixtime`)) as `uid` FROM `testtable` GROUP BY `id`)

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0540 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.