Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / SQLite Новый топик    Ответить
 узнать разницу дат.  [new]
thedrw
Member

Откуда:
Сообщений: 3
Может, я дурачок, но того, что мне подходит найти не смог.
Есть таблица вида
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.
29 сен 18, 18:05    [21689930]     Ответить | Цитировать Сообщить модератору
 Re: узнать разницу дат.  [new]
VSVLAD
Member

Откуда: Краснодар
Сообщений: 1299
thedrw
в ней нет primary key`а, но я так понимаю, можно обращаться к строчкам по rowid
Можно select * from item_zone where rowid = ?, но зачем?

thedrw
Как можно показать данное значение

Например, так:
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

`action_date`	TEXT NOT NULL, -- Вообще, если это Unix время, то хранить надо в INTEGER. TEXT не предназначен для этого формата времени
29 сен 18, 22:58    [21690127]     Ответить | Цитировать Сообщить модератору
 Re: узнать разницу дат.  [new]
thedrw
Member

Откуда:
Сообщений: 3
VSVLAD,

опять же, может я и дурачок, но приведенное вами решение не работает, возвращает просто таблицу, с одним дополнительным столбом данных, который просто дублирует days_price_established, хотя в принципе основная задача - это узнать неизвестный d_p_e
2 окт 18, 00:40    [21692021]     Ответить | Цитировать Сообщить модератору
 Re: узнать разницу дат.  [new]
thedrw
Member

Откуда:
Сообщений: 3
С помощью некоторого копипаста, смог сконструировать решение, которое вводит в таблицу то что мне нужно, через update.
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), постоянно какие то ошибки.
2 окт 18, 01:28    [21692058]     Ответить | Цитировать Сообщить модератору
Все форумы / SQLite Ответить