Как sqlite заменить ноль с предыдущим значением

-3

Таблица этого:

field5 field19
Dr        1
Null      2
Null      3
Td        4
Td        5
Null      6

форма должна быть представлена в этом:

 field5   field19
    Dr      1
    Dr      2
    Dr      3
    Td      4
    Td      5
    Td      6

Я долго искал, но именно для sqlite я не нашел решения. Пожалуйста помоги

  • 0
    Пожалуйста, напишите полную и проверяемую программу с вашими полями. Есть много деталей, которые вы можете сделать неправильно.
  • 0
    Это может определенно выиграть от более подробного объяснения того, что вы пытаетесь достичь и что вы пытались.
Показать ещё 1 комментарий
Теги:

2 ответа

0
Лучший ответ

Оконная функция поможет:

select *,  
      max(field5) over (order by field19)
from table t;

Вы также можете использовать коррелированный подзапрос:

select t.*,
       (select t1.field5 
        from table t1 
        where t1.field19 <= t.field19 and t1.field5 is not null
        order by t1.field19 desc 
        limit 1
       )
from table t;
  • 0
    Thx человек, но sqlite не имеют "более", во втором коде запроса вернуть полную таблицу (Ĭ ^ Ĭ)
  • 0
    @NuttyBunny. , , Что вы подразумеваете под return full table вторая версия должна делать то, что вы хотите.
Показать ещё 2 комментария
0

Вы можете использовать это, что находит предыдущее нон null значение для field5 (если она существует):

select 
coalesce(t.field5, (
  select tt.field5 from tablename tt where tt.field19 = (
    select max(tablename.field19) from tablename where tablename.field19 < t.field19 and tablename.field5 is not null)
  )
) as field5, 
t.field19 
from tablename t

Схема (SQLite v3.26)

CREATE TABLE tablename ( field5 TEXT, field19   INTEGER ); 
insert into tablename (field5, field19) values 
('Dr1', 1), 
(null, 2), (null, 3), 
('Td', 4), 
('Td', 5), (null, 6), (null, 7),('Dr1', 8),(null, 9),('Td', 10),(null, 11),(null, 12);

Запрос № 1

select * from tablename;

| field5 | field19 |
| ------ | ------- |
| Dr1    | 1       |
|        | 2       |
|        | 3       |
| Td     | 4       |
| Td     | 5       |
|        | 6       |
|        | 7       |
| Dr1    | 8       |
|        | 9       |
| Td     | 10      |
|        | 11      |
|        | 12      |

Запрос № 2

select 
coalesce(t.field5, (
  select tt.field5 from tablename tt where tt.field19 = (
    select max(tablename.field19) from tablename where tablename.field19 < t.field19 and tablename.field5 is not null)
  )
) as field5, 
t.field19 
from tablename t;

| field5 | field19 |
| ------ | ------- |
| Dr1    | 1       |
| Dr1    | 2       |
| Dr1    | 3       |
| Td     | 4       |
| Td     | 5       |
| Td     | 6       |
| Td     | 7       |
| Dr1    | 8       |
| Dr1    | 9       |
| Td     | 10      |
| Td     | 11      |
| Td     | 12      |

Посмотреть на БД Fiddle

  • 0
    Есть результаты, как это ноль 2, ноль 3, ноль 4
  • 0
    @NuttyBunny Нажмите на ссылку демонстрации и убедитесь, что она работает. Если это не работает с вашими данными, то вы не разместили правильные данные образца или не объяснили, что вы хотите правильно.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню