Вопрос по SQL

Gasparfx

Сорри если вопрос тупой, но я ламер в этом деле, так что прошу сильно не бить...
Короче задача такая: есть таблица Table1, в ней есть поле Data следующего содержимого(каждая буква, это отдельная запись, для удобства записал в строку):
SELECT Data FROM Table1;

abacccbbcabbbba....

надо сформировать SQL запрос, так чтобы в результате выборки, участки с повторяющимися символами были возвращены как один символ, т.е. вышеприведённый пример был бы такой:
 abacbcaba.... 

xz_post

SELECT DISTINCT Data FROM Table1;

Gasparfx

спс, попробую...

durka82

Этот запрос будет выдавать просто
abc....
- то есть вообще будут выводиться только уникальные буквы.
А вроде нужно только сворачивать последовательные одинаковые символы в один.

sinet

Какая БД?

0000

> сворачивать последовательные одинаковые символы
Строки в нормальной БД неупордоченны, т.е. нет такого - вот это строка предыдущая для вот этой.
Если конечно это не dbf какой нить, где строки все таки неявно понумерованы.

grnat

rownum надо юзать

durka82

Ты это к чему?
Если что, в примере символы по возрастанию получились случайно - я просто переделал исходный пример, а в нем уникальные получились по алфавиту.
Или ты хочешь сказать, что DISTINCT устраняет только соседние дубликаты?

Dasar

> Ты это к чему?
он хочет сказать, что в базе нет понятия: "соседние" строки

0000

Для нормальной БД
a
b
b
с
аналогично
b
a
b
с
Следовательно никаких последовательностей и быть не может.

durka82


он хочет сказать, что в базе нет понятия: "соседние" строки

Следовательно никаких последовательностей и быть не может.
Ааа.
Понятно.
Я это понимаю.
Другой вопрос - что хочет автор темы.
Скорее всего он подразумевает, что эти символы все-таки как-то упорядочены (по другому полю).
В этом случае вариант тоже не подходит.
А вот как должен выглядеть правильный вариант - не знаю - думаю, что на SQL это если и можно написать, то очень громоздко.

bars71

Так что к автору даже два вопроса:
1. Что определяет порядок дат? "Так было в файле, из которого оно в базу попало" не подойдет
2. Какая БД используется?

Gasparfx

1) Данные в сервер БД поступают от некоторого аппаратного устройства через равномерные промежутки времени и упорядочены по порядку ФАКТИЧЕСКОГО поступления в БД (отсюда определённость понятия "предыдущий", "следующий"). Информация во временном поле у этих данных является искажённым из за программной ошибки микроконтроллера на устройстве источника данных (данные о времени для каждой записи поступают в БД также с устройства из за этого имеется много повторяющихся наборов записей с одинаковой меткой времени (но с разными данными). Собственно по временному полю и необходимо сделать требуемую выборку, чтобы разобраться в закономерности происходящей "порчи" данных и исправить программную ошибку на устрйстве.
2) БД MySQL

qsk78

Если считать, что время всегда различно (а иначе опять возникают противоречия то можно сделать так:

SELECT t1.data FROM table1 AS t1 WHERE
(SELECT count(data) FROM table1 WHERE
data <> t1.data AND
time >= (SELECT max(time) FROM table1 WHERE
time < t1.time AND
data = t1.data) AND
time <= t1.time) > 0
OR
(SELECT count(data) FROM table1 WHERE
time < t1.time AND
data = t1.data) = 0
ORDER BY t1.time;

margadon

а обязательно для этого прям БД использовать? Может в файл писать?

sakura

Для нормальной БД
a
b
b
с
аналогично
b
a
b
с
+1

durka82

Информация во временном поле у этих данных является искажённым из за программной ошибки микроконтроллера на устройстве источника данных

БД ведь стоит на компе?
Тогда что мешает при регистрации данных брать время с компа, а не с микроконтроллера?
Оставить комментарий
Имя или ник:
Комментарий: