Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запрос, помогите с SQL 
:(
    Опции темы
kapbepucm
Дата 13.7.2007, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 993
Регистрация: 14.6.2007
Где: Латвия

Репутация: нет
Всего: 12



Имеется таблица:
Код

BeginTime          CurrentTime               IsActive
12:55                 12:55                   True
12:55                 12:56                   True
12:55                 12:57                   True
12:55                 12:58                   True
12:55                 12:59                   True
12:55                 13:00                   True
12:55                 13:01                   False
12:55                 13:02                   True
12:55                 13:03                   False
12:55                 13:04                   True
12:55                 13:05                   True
13:06                 13:06                   True
13:06                 13:07                   True
13:06                 13:08                   True

Здесь приведена таблица активности какого-то процесса. Надо высчитать общее время активности (IsActive) за 1 сессию (BeginTime). Но, если, как в 9 строке 1 True "обрамлён" False, то это не активность. Короче, запрос должен выглядеть так:
Код

BeginTime             ActiveTime
12:55                  (13:00-12:55)+(13:05-13:04)
13:06                  (13:08-13:06)

Видимо как-то надо интервалы видеть... Активный временной интервал должен иметь минимум 2 True.

Это сообщение отредактировал(а) kapbepucm - 13.7.2007, 12:10


--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
Akina
Дата 13.7.2007, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Сгруппируй по BeginTime.
Свяжи таблицу с собой (Full Join), добавив PreviousActivity и NextActivity.
Отбрось те, у которых IsActive=False либо PreviousActivity=NextActivity=False.
Просчитай по каждой группе Count.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
kapbepucm
Дата 13.7.2007, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 993
Регистрация: 14.6.2007
Где: Латвия

Репутация: нет
Всего: 12



Akina, спасибо, всё понятно кроме того, как сделать Previous и Next. Как увидеть соседние строки?


--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
Akina
Дата 13.7.2007, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Сперва связываешь таблицу саму с собой по BeginTime1=BeginTime2 и строишь поле CurrentTime2-CurrentTime1, отбирая те, у кого это поле больше 0. Получил запрос 1.
Затем на его основе выбираешь только те строки, у которых эта разница минимальна. Получил запрос 2.
Связав запрос 2 с начальной таблицей по всем полям исходной, получишь поле Previous.
Аналогично получишь поле Next.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
kapbepucm
Дата 16.7.2007, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 993
Регистрация: 14.6.2007
Где: Латвия

Репутация: нет
Всего: 12



Хорошо, сдесь понятно. Похожий вопрос: есть таблица
Код

F1                Decription           Ext
---------------------------------------------------
Ver1            no comments          1 этаж
Ver2            1 раз               2 этаж
XVer            1 раз               3 этаж
AVer            no comments          1 этаж
Unknown        2 раза               4 этаж

Надо увидеть соседние строки (для Ext). Ответ должен быть таким:
Код

F1                Decription          Ext         PrevExt       NextExt
---------------------------------------------------------------------------------
Ver1            no comments          1 этаж        no data      2 этаж
Ver2            1 раз                  2 этаж       1 этаж       3 этаж
XVer            1 раз                  3 этаж       2 этаж       1 этаж
AVer            no comments          1 этаж       3 этаж        4 этаж
Unknown         2 раза                 4 этаж       1 этаж        no data


Это сообщение отредактировал(а) kapbepucm - 16.7.2007, 13:05


--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
Akina
Дата 16.7.2007, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата(kapbepucm @  16.7.2007,  13:53 Найти цитируемый пост)
Надо увидеть соседние строки. Ответ должен быть таким:

В реляционной БД нет позиционного положения записи до тех пор, пока не задана сортировка. А какая сортировка дает тебе именно такой порядок записей в исходной таблице?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
kapbepucm
Дата 16.7.2007, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 993
Регистрация: 14.6.2007
Где: Латвия

Репутация: нет
Всего: 12



Есть идентиф. номер строки. F1 уникальный, но надо расставлять именно так (в хронологическом порядке заполнения таблицы).

Это сообщение отредактировал(а) kapbepucm - 16.7.2007, 13:16


--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
Akina
Дата 16.7.2007, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата(kapbepucm @  16.7.2007,  14:10 Найти цитируемый пост)
Есть идентиф. номер строки

Вот его и используй при связывании таблицы с собой. Принцип - то же, что описан выше


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
kapbepucm
Дата 16.7.2007, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 993
Регистрация: 14.6.2007
Где: Латвия

Репутация: нет
Всего: 12



А если сортировка происходит по текстовому столбцу, там что отнимать? Например, вместо ID строки у меня PosA, PosB, PosC, PosD, PosE и т.д. Надо каким-нибудь образом превращать в числа? А если сортировка по 2 и более столбцам (с текстом)?

Это сообщение отредактировал(а) kapbepucm - 16.7.2007, 13:30


--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
Akina
Дата 16.7.2007, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата(kapbepucm @  16.7.2007,  14:28 Найти цитируемый пост)
А если сортировка происходит по текстовому столбцу, там что отнимать?

Значит, придется создать вьюху, а в ней синтетический столбец порядкового номера... 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
kapbepucm
Дата 16.7.2007, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 993
Регистрация: 14.6.2007
Где: Латвия

Репутация: нет
Всего: 12



Спасибо.


--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
kapbepucm
Дата 19.7.2007, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 993
Регистрация: 14.6.2007
Где: Латвия

Репутация: нет
Всего: 12



Цитата(Akina @  16.7.2007,  14:15 Найти цитируемый пост)
придется создать вьюху, а в ней синтетический столбец 

Я, наверное, не тем путём иду... Нихрена не выходит...
Короче, начну сначала. Есть таблица:
Код

DocDate        DocID    Info
--------------------------------------------------
01.01.2001     2        Взятка
01.01.2001     1        Пусковая установка HT-523x
02.01.2001     4        Химическое оружие (подарок)
19.07.2007     3        Взятка

Отсортировано по DocDate и DocID
Код

DocDate        DocID    Info
--------------------------------------------------
01.01.2001     1        Пусковая установка HT-523x
01.01.2001     2        Взятка
02.01.2001     4        Химическое оружие (подарок)
19.07.2007     3        Взятка

Надо добавить столбец LineID (пронумеровать). DocID это текст. LineID- LongInteger. DocDate- Date.
Код

LineID  DocDate        DocID     Info
--------------------------------------------------
1       01.01.2001     1         Пусковая установка HT-523x
2       01.01.2001     2         Взятка
3       02.01.2001     4         Химическое оружие (подарок)
4       19.07.2007     3         Взятка

Как?

Это сообщение отредактировал(а) kapbepucm - 19.7.2007, 09:35


--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
Akina
Дата 19.7.2007, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата(kapbepucm @  19.7.2007,  10:23 Найти цитируемый пост)
Надо добавить столбец LineID (пронумеровать). 

Господи, зачем?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
kapbepucm
Дата 20.7.2007, 08:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 993
Регистрация: 14.6.2007
Где: Латвия

Репутация: нет
Всего: 12



Ну, типа:
Цитата(Akina @  16.7.2007,  14:15 Найти цитируемый пост)
синтетический столбец порядкового номера...  

Или я не так понял?


--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
Akina
Дата 20.7.2007, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Таблица tab, поля fld1 и fld2, строим номер при сортировке по полю fld2:
Код

SELECT tab.fld1, tab.fld2, Count(tab.fld1) AS [Num]
FROM tab, tab AS tab_1
WHERE tab.fld2>=[tab_1].[fld2]
GROUP BY tab.fld1, tab.fld2
ORDER BY tab.fld2;



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS Access"
Akina
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] и [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS Access | Следующая тема »


 




[ Время генерации скрипта: 0.0608 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.