| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > MS Access > Запрос |
| Автор: kapbepucm 13.7.2007, 11:41 | ||||
Имеется таблица:
Здесь приведена таблица активности какого-то процесса. Надо высчитать общее время активности (IsActive) за 1 сессию (BeginTime). Но, если, как в 9 строке 1 True "обрамлён" False, то это не активность. Короче, запрос должен выглядеть так:
Видимо как-то надо интервалы видеть... Активный временной интервал должен иметь минимум 2 True. |
| Автор: Akina 13.7.2007, 12:16 |
| Сгруппируй по BeginTime. Свяжи таблицу с собой (Full Join), добавив PreviousActivity и NextActivity. Отбрось те, у которых IsActive=False либо PreviousActivity=NextActivity=False. Просчитай по каждой группе Count. |
| Автор: kapbepucm 13.7.2007, 12:36 |
| Akina, спасибо, всё понятно кроме того, как сделать Previous и Next. Как увидеть соседние строки? |
| Автор: Akina 13.7.2007, 17:14 |
| Сперва связываешь таблицу саму с собой по BeginTime1=BeginTime2 и строишь поле CurrentTime2-CurrentTime1, отбирая те, у кого это поле больше 0. Получил запрос 1. Затем на его основе выбираешь только те строки, у которых эта разница минимальна. Получил запрос 2. Связав запрос 2 с начальной таблицей по всем полям исходной, получишь поле Previous. Аналогично получишь поле Next. |
| Автор: kapbepucm 16.7.2007, 12:53 | ||||
Хорошо, сдесь понятно. Похожий вопрос: есть таблица
Надо увидеть соседние строки (для Ext). Ответ должен быть таким:
|
| Автор: Akina 16.7.2007, 13:05 |
В реляционной БД нет позиционного положения записи до тех пор, пока не задана сортировка. А какая сортировка дает тебе именно такой порядок записей в исходной таблице? |
| Автор: kapbepucm 16.7.2007, 13:10 |
| Есть идентиф. номер строки. F1 уникальный, но надо расставлять именно так (в хронологическом порядке заполнения таблицы). |
| Автор: Akina 16.7.2007, 13:20 |
Вот его и используй при связывании таблицы с собой. Принцип - то же, что описан выше |
| Автор: kapbepucm 16.7.2007, 13:28 |
| А если сортировка происходит по текстовому столбцу, там что отнимать? Например, вместо ID строки у меня PosA, PosB, PosC, PosD, PosE и т.д. Надо каким-нибудь образом превращать в числа? А если сортировка по 2 и более столбцам (с текстом)? |
| Автор: kapbepucm 16.7.2007, 15:10 |
| Спасибо. |
| Автор: kapbepucm 19.7.2007, 09:23 | ||||||
Я, наверное, не тем путём иду... Нихрена не выходит... Короче, начну сначала. Есть таблица:
Отсортировано по DocDate и DocID
Надо добавить столбец LineID (пронумеровать). DocID это текст. LineID- LongInteger. DocDate- Date.
Как? |
| Автор: Akina 19.7.2007, 16:16 |
Господи, зачем? |
| Автор: kapbepucm 20.7.2007, 08:47 |
| Ну, типа: Или я не так понял? |
| Автор: Akina 20.7.2007, 12:04 | ||
Таблица tab, поля fld1 и fld2, строим номер при сортировке по полю fld2:
|