информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Портрет посетителяСетевые кракеры и правда о деле ЛевинаВсе любят мед
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Google заблокировала 2 с лишним... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[SQL] Попутный вопрос 05.05.03 19:00  Число просмотров: 1294
Автор: vh <Дмитрий> Статус: Member
<"чистая" ссылка>
А как например если такая ситуация:
есть запрос:
SELECT dt, name, comment FROM guestbook ORDER BY dt DESC

но хочется чтобы были приняты не все записи, а лишь начиная с n-ой по k-тою (именно из этого запроса)

можно ли это сделать с помощью SQL? если нет, то как это сделать через php?
<programming>
[SQL] Работа с датами, запрос 05.05.03 08:49  
Автор: Maksim Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Есть таблица состоящая из некторых столбцов (дата, масса, плотность и т.д.).
Столбец дата имеет формат Datetime "2002-08-09 13:00:00".
Необходимо выбрать все записи, в которых разница составиляет более 20 секунд.
Например:
2002-08-09 13:00:00
2002-08-09 13:00:34
2002-08-09 13:00:45
2002-08-09 13:01:00
2002-08-09 13:01:13
Т.е. должна получиться следующая таблица:
Начало | Конец
2002-08-09 13:00:00 | 2002-08-09 13:00:34
2002-08-09 13:00:45 | 2002-08-09 13:00:13

Помогите, пожалуйста, напистать грамотный запрос.
[SQL] Попутный вопрос 05.05.03 19:00  
Автор: vh <Дмитрий> Статус: Member
<"чистая" ссылка>
А как например если такая ситуация:
есть запрос:
SELECT dt, name, comment FROM guestbook ORDER BY dt DESC

но хочется чтобы были приняты не все записи, а лишь начиная с n-ой по k-тою (именно из этого запроса)

можно ли это сделать с помощью SQL? если нет, то как это сделать через php?
Похожий вопрос где-то на форуме уже поднимался; если я правильно помню, то... 05.05.03 19:07  
Автор: Ktirf <Æ Rusakov> Статус: Elderman
<"чистая" ссылка>
> А как например если такая ситуация:
> есть запрос:
> SELECT dt, name, comment FROM guestbook ORDER BY dt DESC
>
> но хочется чтобы были приняты не все записи, а лишь начиная
> с n-ой по k-тою (именно из этого запроса)
>
> можно ли это сделать с помощью SQL? если нет, то как это
> сделать через php?
К сожалению, переносимого способа сделать это через SQL, похоже, нет. Более или менее "переносимо", то есть не привязываясь к конкретному серверу SQL, это можно сделать через курсоры.
[SQL] Работа с датами, запрос 05.05.03 10:27  
Автор: Sandy <Alexander Stepanov> Статус: Elderman
<"чистая" ссылка>
> Есть таблица состоящая из некторых столбцов (дата, масса,
> плотность и т.д.).
> Столбец дата имеет формат Datetime "2002-08-09 13:00:00".

А если этот столбец раскидать на два с типами дата и время, а потом ставить условие с вычитанием?
[SQL] Работа с датами, запрос 05.05.03 11:39  
Автор: Maksim Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> > Есть таблица состоящая из некторых столбцов (дата,
> масса,
> > плотность и т.д.).
> > Столбец дата имеет формат Datetime "2002-08-09
> 13:00:00".
>
> А если этот столбец раскидать на два с типами дата и время,
> а потом ставить условие с вычитанием?

Так не получится, я пробывал.

А запрос имеет примерно такой вид:
select * from table a, table b where second(b.date_enter)+60*(((minute(b.date_enter)+60*(hour(b.date_enter)-hour(a.date_enter)))-minute(a.date_enter)))-second(a.date_enter)>20;

В результате записи выбераются следующим образом:
Начало | Конец
2002-08-09 13:00:00 | 2002-08-09 13:00:34
2002-08-09 13:00:00 | 2002-08-09 13:00:45
2002-08-09 13:00:00 | 2002-08-09 13:01:00
2002-08-09 13:00:00 | 2002-08-09 13:01:13
2002-08-09 13:00:34 | 2002-08-09 13:01:00
2002-08-09 13:00:34 | 2002-08-09 13:01:13
2002-08-09 13:00:45 | 2002-08-09 13:01:13

А нужно чтоб было:
Начало | Конец
2002-08-09 13:00:00 | 2002-08-09 13:00:34
2002-08-09 13:00:45 | 2002-08-09 13:00:13
имхо на ANSI SQL - Никак, только с помощью ф-ий. 05.05.03 11:47  
Автор: PS <PS> Статус: Elderman
<"чистая" ссылка>
имхо на ANSI SQL - Никак, только с помощью ф-ий. 05.05.03 11:58  
Автор: Maksim Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Каких, например.
Открываешь курсор, и пишешь обычную сортировку. 05.05.03 12:03  
Автор: PS <PS> Статус: Elderman
<"чистая" ссылка>
см. доки PL/SQL, MSSQL
Открываешь курсор, и пишешь обычную сортировку. 05.05.03 12:12  
Автор: Maksim Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> см. доки PL/SQL, MSSQL
Причем тут сортировка.
В результате записи выбераются следующим образом:
Начало | Конец
2002-08-09 13:00:00 | 2002-08-09 13:00:34
2002-08-09 13:00:00 | 2002-08-09 13:00:45
2002-08-09 13:00:00 | 2002-08-09 13:01:00
2002-08-09 13:00:00 | 2002-08-09 13:01:13
2002-08-09 13:00:34 | 2002-08-09 13:01:00
2002-08-09 13:00:34 | 2002-08-09 13:01:13
2002-08-09 13:00:45 | 2002-08-09 13:01:13
А нужно чтоб было:
Начало | Конец
2002-08-09 13:00:00 | 2002-08-09 13:00:34
2002-08-09 13:00:45 | 2002-08-09 13:00:13
<отв
Дык, 05.05.03 12:49  
Автор: PS <PS> Статус: Elderman
<"чистая" ссылка>
Так примени к своиму результату инструкцию, которая убирает повторающинся записи - и будет тебе то что надо.

P.S. а я бы написал ф-ию ;))
1. Взять первую запись (или ту на которую указывает курсор)
2. Пробежатся по остальным записям
3. Для каждой сделать вычисление, подходящие поместить во временное хранилище.
4. Сместить курсор, вернутся на п.1

P.S. Кстати, я не понял, что такое "Начало | Конец" Это у тебя два поля (???) или ты просто так весь вывод отформатировал ?
Если два поля - тогда совсем ничего не понятно:
> 2002-08-09 13:00:00 | 2002-08-09 13:00:34
> 2002-08-09 13:00:45 | 2002-08-09 13:00:13
А почему например не
2002-08-09 13:00:00 | 2002-08-09 13:00:34
2002-08-09 13:00:13 | 2002-08-09 13:00:45


> > см. доки PL/SQL, MSSQL
> Причем тут сортировка.
> В результате записи выбераются следующим образом:
> Начало | Конец
> 2002-08-09 13:00:00 | 2002-08-09 13:00:34
> 2002-08-09 13:00:00 | 2002-08-09 13:00:45
> 2002-08-09 13:00:00 | 2002-08-09 13:01:00
> 2002-08-09 13:00:00 | 2002-08-09 13:01:13
> 2002-08-09 13:00:34 | 2002-08-09 13:01:00
> 2002-08-09 13:00:34 | 2002-08-09 13:01:13
> 2002-08-09 13:00:45 | 2002-08-09 13:01:13
> А нужно чтоб было:
> Начало | Конец
> 2002-08-09 13:00:00 | 2002-08-09 13:00:34
> 2002-08-09 13:00:45 | 2002-08-09 13:00:13
> <отв
Дык, 05.05.03 13:30  
Автор: Maksim Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Есть таблица:
Date_enter | Massa | Press |
2002-08-09 13:00:00 | 10 | 0.5 |
2002-08-09 13:00:34 | 13 | 0.1 |
2002-08-09 13:00:45 | 9 | 0.2 |
2002-08-09 13:01:00 | 11 | 0.9 |
2002-08-09 13:01:13 | 18 | 0.7 |

Нужно получить новую таблицу:
Date_Begin | Date_End | Min_Massa | Min_Press |
2002-08-09 13:00:00 | 2002-08-09 13:00:34 | 10 | 0.1 |
2002-08-09 13:00:45 | 2002-08-09 13:01:13 | 9 | 0.2 |

Т.е. новое начало периода времени всегда должно быть больше предыдущего.
Существует ли какие-нибудь команды которые переключают указатель записей в БД (типа Next, Record, как в FoxPro).
А если результат выборки твоего запроса сгруппировать по полю Date_Begin? 05.05.03 16:52  
Автор: Sandy <Alexander Stepanov> Статус: Elderman
<"чистая" ссылка>
Твоя задача ANSI SQL не решается. 05.05.03 14:45  
Автор: PS <PS> Статус: Elderman
<"чистая" ссылка>
Формализованно звучит так:
Есть одномерный массив [N]. Необходимо создать двумерный массив [M,K], такой, что ( (Ki - Mi) > 20 ) AND Ki > M(i-1), где M и K принадлежат N.
В условии появились индексы i, i-1 - отсюда, задача с помощью ANSI SQL не решается.
Во первых, SQL ничего не знает о порядке следования записей. next, prev, first, last - это все термины курсоров (см. PL/SQL, MSSQL, ODBC, OLEDB, CRecordset, etc. )
Во вторых, SQL не имеет механизма "памяти", поэтому указать в условии выборки Ki > M(i-1) - невозможно.

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

P.S. хотя давненько за сиквел не держался, так что если "старшие" товарищи докажут, что задача решаема - с удовольствием почитаю.

> Есть таблица:
> Date_enter | Massa | Press |
> 2002-08-09 13:00:00 | 10 | 0.5 |
> 2002-08-09 13:00:34 | 13 | 0.1 |
> 2002-08-09 13:00:45 | 9 | 0.2 |
> 2002-08-09 13:01:00 | 11 | 0.9 |
> 2002-08-09 13:01:13 | 18 | 0.7 |
>
> Нужно получить новую таблицу:
> Date_Begin | Date_End |
> Min_Massa | Min_Press |
> 2002-08-09 13:00:00 | 2002-08-09 13:00:34 | 10
> | 0.1 |
> 2002-08-09 13:00:45 | 2002-08-09 13:01:13 | 9
> | 0.2 |
>
> Т.е. новое начало периода времени всегда должно быть больше
> предыдущего.
> Существует ли какие-нибудь команды которые переключают
> указатель записей в БД (типа Next, Record, как в FoxPro).
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach