Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
| | | | | | | |
Дык, 05.05.03 13:30 Число просмотров: 1115
Автор: 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).
|
<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).
|
|
|