Предполагая, что id
не имеет пробелов, вы можете реализовать это, используя:
select id, (next_id - id + 1) as cnt
from (select t.*,
(select min(t2.id)
from t t2
where t2.id > t.id and
t2.value > t.value + 13.5
) as next_id
from t
) t
order by cnt asc
fetch first 1 row only;
Для меня не очевидно, как вы можете использовать оконные функции для этого.
ПРИМЕЧАНИЕ: См. Другие ответы и комментарии ниже - старая информация и неработающие ссылки удалены (нельзя удалить однажды принятый ответ).
У Марти Алчина есть раздел об этом в главе 3 Pro Django, просмотрите здесь .
На основании ответов на вопросы я пришел к следующему решению:
from django.core.files.base import ContentFile
import pickle
content = pickle.dumps(somedata)
fid = ContentFile(content)
data_entry.file.save(filename, fid)
fid.close()
Все это делается на стороне сервера, и пользователям НЕ разрешается загружать соленья. Я протестировал его, и он работает нормально, но я открыт для любых предложений.
В вашей базе данных атрибут файл - это просто путь к файлу. Итак, поскольку вы не выполняете фактическую загрузку, вам необходимо сохранить файл на диске, а затем сохранить путь в базе данных.
f = open(filename, 'w')
pickle.dump(somedata, f)
f.close()
data_entry.file=filename
data_entry.save()
Я никогда не делал это, но, прочитав немного соответствующего кода, я бы начал с создания экземпляра django.core.files.base.ContentFile и присвоения ему значения поля.
Не лучше ли хранить данные в текстовом поле? В конце концов, это не загрузка файлов.