Программирование в SQLITE - PullRequest
0 голосов
/ 27 мая 2019

В колледже я изучил PL / SQL, который я использовал для программного вставки / обновления данных в таблицу.

Так есть ли способ сделать это в SQLITE?

У меня есть одна таблицакнига, которая имеет две колонки: readPages и currentPage.readPage содержит информацию о том, сколько страниц я прочитал сегодня, а currentPage показывает общее количество прочитанных страниц до сегодняшнего дня.

В настоящее время у меня есть данные только для readPages, поэтому я хочу вычислить currentPage для прошлыхдней, например

readPages:   19  10  43  20  35   # I have data for 5 days
currentPage: 19  29  72  92  127  # I want to calculate it

Так что это может быть легко с программированием, но как это сделать с sqlite, поскольку это не похоже на plsql.

Table Schema And data

Ответы [ 2 ]

1 голос
/ 27 мая 2019

Порядок строк можно определить по id или date.
Проблема со столбцом date заключается в том, что его формат: 'DD-MM' несопоставим.
Лучше замените его на что-то вроде: 'YYYY-MM-DD'.
Поскольку ваша версия SQLite не позволяет вам использовать оконные функции, вы можете делать то, что вам нужно, с помощью этого:

update findYourWhy 
set currentPage = coalesce(
  (select sum(f.readPage) from findYourWhy f where f.id <= findYourWhy.id), 
  0
);

Если вы измените формат столбца date, вы также можете сделать это с помощью:

update findYourWhy 
set currentPage = coalesce(
  (select sum(f.readPage) from findYourWhy f where f.date <= findYourWhy.date), 
  0
);

См. Демоверсию .

CREATE TABLE findYourWhy (
    id  INTEGER,
    date    TEXT,
    currentPage INTEGER,
    readPage    INTEGER,
    PRIMARY KEY(id)
);
INSERT INTO findYourWhy (id,date,currentPage,readPage) VALUES 
 (1,'06-05',null,36),
 (2,'07-05',null,9),
 (3,'08-05',null,12),
 (4,'09-05',null,5),
 (5,'10-05',null,12),
 (6,'11-05',null,13),
 (7,'12-05',null,2),
 (8,'13-05',null,12),
 (9,'14-05',null,3),
 (10,'15-05',null,5),
 (11,'16-05',null,6),
 (12,'17-05',null,7),
 (13,'18-05',null,7);

Результаты:

| id  | date  | currentPage | readPage |
| --- | ----- | ----------- | -------- |
| 1   | 06-05 | 36          | 36       |
| 2   | 07-05 | 45          | 9        |
| 3   | 08-05 | 57          | 12       |
| 4   | 09-05 | 62          | 5        |
| 5   | 10-05 | 74          | 12       |
| 6   | 11-05 | 87          | 13       |
| 7   | 12-05 | 89          | 2        |
| 8   | 13-05 | 101         | 12       |
| 9   | 14-05 | 104         | 3        |
| 10  | 15-05 | 109         | 5        |
| 11  | 16-05 | 115         | 6        |
| 12  | 17-05 | 122         | 7        |
| 13  | 18-05 | 129         | 7        |
1 голос
/ 27 мая 2019

Если вы используете sqlite 3.25 или новее, что-то вроде:

SELECT date, readPages
      , sum(readPages) OVER (ORDER BY date) AS total_pages_read
FROM yourTableName
ORDER BY date;

вычислит промежуточный итог страниц.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...