Вверх ↑
Этот топик читают: Гость
Ответов: 1891
Рейтинг: 110
#61: 2007-06-14 00:02:47 ЛС | профиль | цитата
nesco, писал(а):
Alexbootch, каким запросом читается последняя строка таблицы?


nesco, если есть столбец id со значением INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT то так:

select * from okved where id in (select max(id) from okved)


если нет столбца id со значением INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT то так:

select * from okved where rowid in (select max(rowid) from okved)


где okved - название таблицы



[size=-2]------ Добавлено в 00:02

Про count:

count(X) возвращает количество не-NULL строк Х в группе.
count(*) возвращает общее число строк Х в группе

Синтаксис:
count(X)
count(*)

Пример:
select count(naim) from okved
select count(*) from okved

карма: 0
%time%
0
Разработчик
Ответов: 26073
Рейтинг: 2122
#62: 2007-06-14 00:23:10 ЛС | профиль | цитата
Alexbootch, огромнейший сенкс.
карма: 22

0
Ответов: 1891
Рейтинг: 110
#63: 2007-06-14 00:40:30 ЛС | профиль | цитата
nesco, писал(а):
Alexbootch, каким запросом читается последняя строка таблицы?


Еще один вариант:
select * from okved ORDER BY rowid DESC LIMIT 1


в LIMIT ставишь число строк, которые нужно вывести с конца таблицы

а так с начала таблицы

select * from okved ORDER BY rowid ASC LIMIT 1

карма: 0
%time%
0
Ответов: 16884
Рейтинг: 1239
#64: 2007-06-14 01:00:22 ЛС | профиль | цитата
nesco писал(а):
каким запросом читается последняя строка таблицы?

1) SELECT MAX(ROWID),  *  FROM <имя таблицы>
или
2) SELECT COUNT(*), * FROM <имя таблицы>
Уже не помню какой, но один из запросов выполняется намного быстрее.

[size=-2]------ Добавлено в 01:00
P.S. 1-й выполняется на люобй таблице - мгновенно т.к. max(rowid) берется с шапки (готовый) и никаких действий, кроме чтения данных последней строки больше не производится.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26073
Рейтинг: 2122
#65: 2007-06-14 01:00:35 ЛС | профиль | цитата
Tad писал(а):
SELECT MAX(ROWID), * FROM <имя таблицы>

А запятая и звездочка зачем? Запрос прокатил без того и без другого.
SELECT MAX(ROWID) FROM <имя таблицы>
Я проверял COUNT(*), он намного медленнее.
карма: 22

0
Ответов: 1891
Рейтинг: 110
#66: 2007-06-14 01:00:43 ЛС | профиль | цитата
nesco, вобщем выбирай сам (проверено на таблице с 51000 записей):

ЗапросВремяКоментарий
select * from okved where rowid in (select max(rowid) from okved)16ms
select * from okved ORDER BY rowid DESC LIMIT 10ms
SELECT MAX(ROWID), * FROM <имя таблицы>125msдобавляется ненужный столбец MAX(ROWID)
SELECT COUNT(*), * FROM <имя таблицы>94ms добавляется ненужный столбец COUNT(*)

карма: 0
%time%
0
Разработчик
Ответов: 26073
Рейтинг: 2122
#67: 2007-06-14 01:04:35 ЛС | профиль | цитата
Alexbootch, да мне значение было нужно. Хотя и вывод записи пригодится. А рекомендации обязательно учту.
карма: 22

0
Ответов: 1891
Рейтинг: 110
#68: 2007-06-14 01:12:40 ЛС | профиль | цитата
nesco, писал(а):
Alexbootch, да мне значение было нужно.


nesco, так бы и сказал сразу
карма: 0
%time%
0
Разработчик
Ответов: 26073
Рейтинг: 2122
#69: 2007-06-14 01:17:03 ЛС | профиль | цитата
Alexbootch, не-не, все правильно -- сначала значение, потом INSERT, а потом чтение последней строки. Еще вопрос. Как записать текущую дату-время при условии что поле формата date, в текст я могу и сам, а вот в date не знаю
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#70: 2007-06-14 01:22:11 ЛС | профиль | цитата
nesco писал(а):
А запятая и звездочка зачем? Запрос прокатил без того и без другого.

Ну ты даешь Вопрос то какой был :
каким запросом читается последняя строка таблицы?
Вот звездочка и прочитала последнюю строку, если бв вопрос был
каким запросом прочитать номер последней строки ?[/code] тогда бы и в моем ответе небыло-бы звездочки.
А так, извини, какой вопрос - такой ответ :D
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 1891
Рейтинг: 110
#71: 2007-06-14 01:27:34 ЛС | профиль | цитата
nesco, в столбец хочешь записывать только дату либо дату и время?
карма: 0
%time%
0
Разработчик
Ответов: 26073
Рейтинг: 2122
#72: 2007-06-14 01:35:17 ЛС | профиль | цитата
Alexbootch, нужна и дата, и время. А при считывании нужен именно двухзначный год, я у тебя в примере не нашел формата DD-MM-YY, там только формат DD-MM-YYYY.

[size=-2]------ Добавлено в 01:35
Tad, ничего против не имею, все правильно, что не до конца правильно поставил вопрос
карма: 22

0
Ответов: 1891
Рейтинг: 110
#73: 2007-06-14 01:41:50 ЛС | профиль | цитата
nesco, вот такие вот форматы в SQLite:

  • YYYY-MM-DD
  • YYYY-MM-DD HH:MM
  • YYYY-MM-DD HH:MM:SS
  • YYYY-MM-DD HH:MM:SS.SSS
  • YYYY-MM-DDTHH:MM
  • YYYY-MM-DDTHH:MM:SS
  • YYYY-MM-DDTHH:MM:SS.SSS
  • HH:MM
  • HH:MM:SS
  • HH:MM:SS.SSS
  • now
  • DDDD.DDDD
    такого формата как YY нет, да и проблемы могут возникныть при выробке если бы был формат YY, т.к. база не может знать что 07-12-01 - это 01.12.2007
  • карма: 0
    %time%
    0
    Разработчик
    Ответов: 26073
    Рейтинг: 2122
    #74: 2007-06-14 02:03:21 ЛС | профиль | цитата
    Alexbootch, хорошо, с форматом я разберусь. Но как всеже читать и записывать в формате date, какими запросами. Мне нужен запрос INSERT c возиожностью записать строку, где дата и время должны быть в одном из полей формата date, а затем считать запросом SELECT всю строку, а значение поля date отформатировать на лету.
    карма: 22

    0
    Ответов: 1891
    Рейтинг: 110
    #75: 2007-06-14 02:57:06 ЛС | профиль | цитата
    nesco, для начала

    если хочешь сделать отдельный столбец для даты (2007-06-14) (например, столбец temp), то таблица должна создаваться так:

    CREATE TABLE НазваниеТаблицы (temp DATE DEFAULT CURRENT_DATE NULL, ...)

    если хочешь сделать отдельный столбец для время (02:11:11) (например, столбец temp), то таблица должна создаваться так:

    CREATE TABLE НазваниеТаблицы (temp TIME DEFAULT CURRENT_TIME NULL, ...)

    если хочешь сделать отдельный столбец для дата и время (2007-06-14 02:11:11) (например, столбец temp), то таблица должна создаваться так:

    CREATE TABLE НазваниеТаблицы (temp TIMESTAMP DEFAULT CURRENT_TIMESTAMP NULL, ...)

    а если не хочешь что бы были пустые строки - замени NULL на NOT NULL

    [size=-2]------ Добавлено в 02:57
    nesco, писал(а):
    Alexbootch, хорошо, с форматом я разберусь. Но как всеже читать и записывать в формате date, какими запросами. Мне нужен запрос INSERT c возиожностью записать строку, где дата и время должны быть в одном из полей формата date, а затем считать запросом SELECT всю строку, а значение поля date отформатировать на лету.


    Допустим есть таблица:

    CREATE TABLE Sobitie (temp TIMESTAMP DEFAULT CURRENT_TIMESTAMP NULL, kommentarii TEXT)


    примечание: формат DATETIME, т.е. 2007-06-14 02:11:11

    вставляем записи так:

    INSERT INTO Sobitie (temp, kommentarii) VALUES (datetime('now','localtime'),'пришли гости')


    Теперь нужно как я понял отформатировать 2007-06-14 02:11:11 ---> 14.06.2007 02:11:11, то так:

    Select strftime("%d.%m.%Y %H:%M:%S","temp") AS temp, kommentarii from Sobitie


    так можно вывести только дату:

    select substr (strftime("%d.%m.%Y %H:%M:%S","temp"),1,10) AS temp, kommentarii from Sobitie


    так только время:

    select substr (strftime("%d.%m.%Y %H:%M:%S","temp"),11,13) AS temp, kommentarii from Sobitie


    ну а так можно вывести дату и время в необходимом тебе формате (14.06.07 12:00:00):

    select replace (strftime("%d.%m.%Y %H:%M:%S","temp"),".20",".") AS temp, kommentarii from Sobitie


    ЗЫ: указанный способ сам понимаешь будет работать только до 2100 года С 2100 года нужно будет заменить ".20" на ".21"

    карма: 0
    %time%
    0
    Сообщение
    ...
    Прикрепленные файлы
    (файлы не залиты)