Есть таблица test:
id integer primary key
id2 integer (число от 1 до 9999)
dt textchar default value (datetime('now','localtime'))
Требуется найти наибольшее id2 за каждый день в диапазоне дат.
Как я понял нужно составить конструкцию с вложенным запросом и алиасом (AS)
select max(t1) from (select id2 from test where date(dt) between date('2016-07-01') and date ('2016-07-10') AS t1 order by date(dt));
танцы с бубном и примеры с сайта sqlite пока не помогают, прошу помочь с логикой запроса "выдай мне максимальное\последнее значение id2 и таблицы test за каждую дату в диапазоне таком то",ни как не могу понять как пользоваться алиасами (AS)
Этот топик читают: Гость
Ответов: 655
Рейтинг: 18
|
|||
карма: 0 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
Попробуй так :
|
|||
карма: 25 |
|
Ответов: 655
Рейтинг: 18
|
|||
Спасибо!
|
|||
карма: 0 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
http://agp1.hx0.ru/.SQLite.Allow.pdf
--- Добавлено в 2016-08-29 22:30:43 Три подключаемые функции для работы с русским текстом в SQLite. FirstChar, Upper, Lower. В архиве пример работы с ними. Редактировалось 6 раз(а), последний 2016-08-30 16:18:56 |
|||
карма: 25 |
| ||
файлы: 2 | SQLite_Function_RU.rar [1.8KB] [616], SQLite_function.JPG [44.1KB] [1149] | ||
Голосовали: | miver |
Ответов: 16884
Рейтинг: 1239
|
|||
Цикл (for) в SQLite
|
|||
карма: 25 |
|
Ответов: 758
Рейтинг: 112
|
|||
Tad писал(а): Цикл (for) в SQLiteУ меня с sqlite3.dll из HiAsm не работает |
|||
карма: 1 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
Последняя - http://www.sqlite.org/download.html
|
|||
карма: 25 |
|
Ответов: 413
Рейтинг: 57
|
|||
Доброе время суток.
Подскажите как грамотно добавить колонку (столбец) в таблицу базы SQLite? Условия такие: нужно проверить базу на наличие колонки с требуемым именем, если такая колонка есть, то ничего не делать, а если нет, то добавить колонку и расположить её второй. Я пытаюсь решать по такому алгоритму: Сперва делаю запрос: "pragma table_info(table);". Получаю список имен столбцов и еще какие-то "0" (индексы или тригеры или ещё что-то не знаю). Затем поиском в этом списке ищу искомое название колонки и если его нет, то создаю временную таблицу и переношу туда все значения с существующей, а в новую колонку записую NULL. Затем удаляю оригинальную таблицу и переименовываю новую созданную. Можно ли это реализовать только запросом к SQLite и как грамотнее это сделать. |
|||
карма: 0 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
Самой малой кровью:
Poputchik писал(а): проверить базу на наличие колонки с требуемым именемSELECT <колонка с требуемым именем> FROM <имя таблицы>; Если в ответ на точке onError no such column: <колонка с требуемым именем> тогда добавляешь колонку ALTER TABLE <имя таблицы> ADD COLUMN <колонка с требуемым именем>; и в неё "автоматом запишется" NULL (один SQLite_Query, один IF_Else, три FormatStr) Редактировалось 3 раз(а), последний 2017-01-03 23:24:01 |
|||
карма: 25 |
|
Ответов: 413
Рейтинг: 57
|
|||
Добавить то получается, вопрос немного в другом:
Poputchik писал(а): добавить колонку и расположить её второйПохоже что простым способом это не получится и колонка всегда добавляется самой последней. Это ладно. Вот только не пойму почему в одном DSC_Query не добавляются столбцы в несколько таблиц: ALTER TABLE "имя 1 таблицы" ADD column "имя колонки" char; ALTER TABLE "имя 2 таблицы" ADD column "имя колонки" char; Если поочередно подавать команды в DSC_Query то добавляет. И ещё вопрос: команду VACUUM; нужно выполнять после добавления колонки или нет? |
|||
карма: 0 |
|
Разработчик
Ответов: 4698
Рейтинг: 426
|
|||
Tad писал(а): Для этого выполняешь запрос:
SELECT <колонка с требуемым именем> FROM <имя таблицы>; А может стоит делать этот запрос с LIMIT 1, чтобы, если данных много, он не тормозил? |
|||
карма: 10 |
| ||
Голосовали: | Poputchik |
Ответов: 16884
Рейтинг: 1239
|
|||
Assasin писал(а): А может стоит делать этот запрос с LIMIT 1, чтобы, если данных много, он не тормозил?Poputchik писал(а): добавить колонку и расположить её второйБД - это полная анархия. Ни порядок записей, ни порядок колонок, для получения нужного результата, не имеет никакого значения. Изначально так и задумывалась. Скорее всего ты что-то намудрил со структурой БД. Poputchik писал(а): Вот только не пойму почему в одном DSC_Query не добавляются столбцы в несколько таблицPoputchik, что это за задача, которая решается добавлением колонок ? Сколько занимаюсь БД - ни разу не добавлял колонки. Редактировалось 6 раз(а), последний 2017-01-04 10:31:04 |
|||
карма: 25 |
|
Разработчик
Ответов: 26113
Рейтинг: 2126
|
|||
Poputchik писал(а): Вот только не пойму почему в одном DSC_Query не добавляются столбцы в несколько таблицПотому, что DSC_Query каждый в своей транзакции, а в одной транзакции нельзя обращаться на запись к разным таблицам, так же, как и делать VACUUM, он просто не сработает. Poputchik писал(а): команду VACUUM; нужно выполнять после добавления колонки или нет?Не обязательно, тк VACUUM предназначен для очистки пустых мест в таблице, те сжатия таблицы после удаления, тк данные после удаления остаются в таблице занимая место. |
|||
карма: 22 |
| ||
Голосовали: | Poputchik |
Ответов: 16884
Рейтинг: 1239
|
|||
Poputchik писал(а): команду VACUUM; нужно выполнять после добавления колонки или нет?nesco писал(а): VACUUM предназначен для очистки пустых мест в таблице==================================== Если работать по такой схеме Poputchik писал(а): Затем поиском в этом списке ищу искомое название колонки и если его нет, то создаю временную таблицу и переношу туда все значения с существующей, а в новую колонку записую NULL. Затем удаляю оригинальную таблицу и переименовываю новую созданную. Редактировалось 1 раз(а), последний 2017-01-04 21:32:52 |
|||
карма: 25 |
| ||
Голосовали: | Poputchik |
Ответов: 413
Рейтинг: 57
|
|||
Tad писал(а): Скорее всего ты что-то намудрил со структурой БД. Когда создавал программу, структура базы казалась правильной и достаточной, но, спустя пару лет ведения нескольких баз разными пользователями, потребовалось в уже существующих базах вести учет ещё одного параметра (по крайней мере во вновь добавляемые данные). Считывание данных из базы выполняется "SELECT * FROM '%1' WHERE ...", т.е. не указаны названия колонок, а все по порядку, вот и хотел разместить новую колонку в удобное место. К базам у меня доступа нет и я стараюсь не ошибиться чтоб их не испортить своей программой. Вот и спросил: "Как грамотнее и нужен ли VACUUM?" Assasin, nesco, Tad - спасибо за подсказки. P.S. Вопрос не по теме: В HiAsm можно найти все места в схеме где расположены глобальные переменные с одни именем включая "ссылки" или нет? Редактировалось 1 раз(а), последний 2017-01-05 02:22:35 |
|||
карма: 0 |
|