powered by simpleCommunicator - 2.0.35     © 2025 Programmizd 02
Форумы / SQLite [игнор отключен] [закрыт для гостей] / узнать разницу дат.
4 сообщений из 4, страница 1 из 1
узнать разницу дат.
    #39710343
thedrw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может, я дурачок, но того, что мне подходит найти не смог.
Есть таблица вида
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE TABLE `item_zone` (
	`item`	INTEGER NOT NULL,
	`zone`	INTEGER NOT NULL,
	`action_date`	TEXT NOT NULL,
	`price`	INTEGER NOT NULL,
	`days_price_established`	INTEGER
);
INSERT INTO `item_zone` VALUES (50374500, 1, 1512248400, 5, 10);
INSERT INTO `item_zone` VALUES (50374500, 1, 1513112400, 9, 1);
INSERT INTO `item_zone` VALUES (50374500, 1, 1513198800, 8, null);


в ней нет primary key`а, но я так понимаю, можно обращаться к строчкам по rowid.
В общем то, action_date хранит дату в unix формате, а days_price_established хранит, сколько времени прошло с изменения цены (по сути action_date(n) - action_date(n-1). Как можно показать данное значение, или ввести его в таблицу. Как реализовать саму алгебру над датами.
Результат желательно одно выбранное поле days_price_established.
...
Рейтинг: 0 / 0
узнать разницу дат.
    #39710400
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
thedrwв ней нет primary key`а, но я так понимаю, можно обращаться к строчкам по rowid Можно select * from item_zone where rowid = ?, но зачем?

thedrwКак можно показать данное значение
Например, так:
Код: sql
1.
2.
3.
4.
5.
select iz.*, 
       julianday(datetime((select min(izm.action_date)
                 from item_zone izm
                 where izm.action_date > iz.action_date), 'unixepoch')) - julianday(datetime(iz.action_date, 'unixepoch')) as days_est  
from item_zone iz



thedrwКак реализовать саму алгебру над датами https://sqlite.org/lang_datefunc.html

Код: sql
1.
`action_date`	TEXT NOT NULL, -- Вообще, если это Unix время, то хранить надо в INTEGER. TEXT не предназначен для этого формата времени
...
Рейтинг: 0 / 0
узнать разницу дат.
    #39711351
thedrw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VSVLAD,

опять же, может я и дурачок, но приведенное вами решение не работает, возвращает просто таблицу, с одним дополнительным столбом данных, который просто дублирует days_price_established, хотя в принципе основная задача - это узнать неизвестный d_p_e
...
Рейтинг: 0 / 0
узнать разницу дат.
    #39711363
thedrw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С помощью некоторого копипаста, смог сконструировать решение, которое вводит в таблицу то что мне нужно, через update.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
update item_zone
    set days_price_established=(
        select round(
            (iz1.action_date-(
                SELECT iz2.action_date FROM item_zone iz2 WHERE iz2.oid<iz1.oid AND iz2.item=iz1.item ORDER by iz2.oid DESC limit 1)
            )/86400) 
      from item_zone iz1 WHERE iz1.oid=item_zone.oid) 
WHERE days_price_established IS NULL; 


Но никак не получается просто вывести то же самое (просто select), постоянно какие то ошибки.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / узнать разницу дат.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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