Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Можно ли на SQLite'е написать следующий запрос и как? / 9 сообщений из 9, страница 1 из 1
27.01.2010, 10:43
    #36432963
CoolFaer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли на SQLite'е написать следующий запрос и как?
Задача такая:
Есть таблица table, в ней поле begintime INTEGER. Нужно найти кол-ва записей, для которых верно условие что разница между begintime < 3600.
Например,
table.begintime
1
10
1000
3700
10000
10500

должны получить
COUNT()
4
2

Как это сделать в sqlite'е, помогите плз?
...
Рейтинг: 0 / 0
27.01.2010, 11:32
    #36433124
Dmitry Arefiev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли на SQLite'е написать следующий запрос и как?
Сформулируй еще раз - ни фига не понятно ...
...
Рейтинг: 0 / 0
27.01.2010, 11:47
    #36433173
CoolFaer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли на SQLite'е написать следующий запрос и как?
Ну например на сях я бы написал так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
int arr[ 6 ] = {  1 ,  10 ,  1000 ,  3700 ,  10000 ,  10500  };
int count =  0 ;
for (int k= 0 ; k< 6 ; k++)
{
   if (k== 5  || arr[k+ 1 ]-arr[k] >  3600 ) 
   {
      printf("%d", count);
      count =  0 ;
   }
   count++;
}
Так понятней немного?
...
Рейтинг: 0 / 0
27.01.2010, 17:44
    #36434398
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли на SQLite'е написать следующий запрос и как?
Можно точно так же как и в С. Только вместо чтения данных из массива, читай их из курсора.
...
Рейтинг: 0 / 0
28.01.2010, 09:44
    #36435246
CoolFaer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли на SQLite'е написать следующий запрос и как?
White Owl, подскажи как это на скулайте будет выглядеть?
...
Рейтинг: 0 / 0
28.01.2010, 17:43
    #36436962
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли на SQLite'е написать следующий запрос и как?
Код: plaintext
1.
2.
3.
4.
5.
6.
sqlite3_prepare_v2(db, "select begintime from table", - 1 , &stmt, &tail);
while(sqlite3_step(stmt) == SQLITE_ROW) {
    begintime = sqlite3_int(stmt,  0 );
    // здесь сравниваешь очередной begintime с сохраненным предыдущим и считаешь все что нужно
}
sqlite3_finalize(stmt);
...
Рейтинг: 0 / 0
29.01.2010, 00:43
    #36437496
АнатоЛой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли на SQLite'е написать следующий запрос и как?
Я в SQLite новичок, но идеи есть %)

Идея такая:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
(1) (2)      (3)                      (4)              (5)            (6)                   (7)
id  t1.bt    t2.bt(t1 shift)        t2.bt-t1.bt   >3600(id)   >3600shift(id)     >3600shift(id) - >3600(id)
0                                                  0              4                        4
1   1         10                    9        
2   10        1000                  990     
3   1000      3700                  2700   
4   3700      10000                 6300           4              6                        2
5   10000     10500                 500   
6   10500     ?                        ?           6 
сначала получаем упорядоченную пронумерованную таблицу разности соседних элементов
т.о. (1), (2), (3), (4) делается по след.принципу
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SELECT t1.rowid as id, t1.begintime as t1bt, t2.begintime as t2bt, (t2.begintime - t1.begintime) AS diff
  FROM table t1, table t2
    WHERE t2.begintime = (
                  SELECT MIN(t3.begintime)
                    FROM table t3
                       WHERE t3.begintime > t1.begintime
     )
назовём результат tmp1234(id, t1bt, t2bt, diff)

таблицу с границами групп (5) делаем как
Код: plaintext
1.
2.
3.
SELECT id
  FROM tmp1234
    WHERE diff >  3600 
назовём результат tmp5(id)

(5), (6), (7) получаем из tmp5.id так же, как мы получали (2), (3), (4) для bt

Остались нюансы SQL конкретно SQLite, производительность, граничные значения и упорядоченность результата, но "это не ко мне, я не тактик, я Стратег" (с) Анек

Ну и плюс к тому же, если не из чего получить изначальный ровненький id, он получается как

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SELECT 
    (SELECT COUNT(*) 
        FROM table tx
           WHERE tx.bt < t1.bt
    ) AS id
   , t1.bt 
  FROM table t1
...
Рейтинг: 0 / 0
29.01.2010, 00:45
    #36437497
АнатоЛой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли на SQLite'е написать следующий запрос и как?
П.С.: Это если нуна чисто на SQL реализовать, конечно....
А так предложенный выше один простенький цикл производительней и проще ДОЛЖЕН получиться
...
Рейтинг: 0 / 0
29.01.2010, 09:58
    #36437809
CoolFaer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли на SQLite'е написать следующий запрос и как?
АнатоЛой, круто :)
...
Рейтинг: 0 / 0
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Можно ли на SQLite'е написать следующий запрос и как? / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]