Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.06.2022, 15:45   #1
sanekgyrev
 
Регистрация: 08.06.2013
Сообщений: 6
По умолчанию Новичок в теме

у меня есть таблица(дата, значение). значения дата не имеет пропусков. столбец со значениями имеет пропуски(NULL). Необходимо в промежутки между NULL найти сумму всех значений, при этом таблица должна выглядеть(дата_начала, дата_конца, сумма)
sanekgyrev вне форума Ответить с цитированием
Старый 27.06.2022, 16:24   #2
Valick
Форумчанин
 
Регистрация: 27.04.2022
Сообщений: 493
По умолчанию

У вас неправильная архитектура, должно быть поле объединяющее эти значения (ключ для группы значений) по которому можно провести группировку и получить искомые значения.
В теории если создавать архитектуру бд по всем правилам нормализации, то значения null в бд вообще быть не должно. На практике чаще всего применяют только первые три закона нормализации. В любом случае ориентироваться на null для получения диапазонов это плохая идея.

Последний раз редактировалось Valick; 27.06.2022 в 16:29.
Valick вне форума Ответить с цитированием
Старый 27.06.2022, 17:16   #3
sanekgyrev
 
Регистрация: 08.06.2013
Сообщений: 6
По умолчанию

Valick, спасибо
sanekgyrev вне форума Ответить с цитированием
Старый 27.06.2022, 19:39   #4
Valick
Форумчанин
 
Регистрация: 27.04.2022
Сообщений: 493
По умолчанию

sanekgyrev, для спасибо время ещё не настало. Расскажите подробнее как происходит заполнение этой таблицы, а ещё лучше опишите и её сущность. В таких вопросах не бывает лишней информации.
Valick вне форума Ответить с цитированием
Старый 27.06.2022, 20:35   #5
sanekgyrev
 
Регистрация: 08.06.2013
Сообщений: 6
По умолчанию

Valick, если говорить откровенно, хотел узнать как в таком случае можно найти заданную сумму. пример привел, чтобы понять в какую сторону двигаться. как в данном случае можно рассчитать сумму, ибо возможно от большого количества информации большая каша в голове))
sanekgyrev вне форума Ответить с цитированием
Старый 27.06.2022, 20:49   #6
sanekgyrev
 
Регистрация: 08.06.2013
Сообщений: 6
По умолчанию

Valick, вот например есть такие данные:
01.01.2016 2
02.01.2016 3
03.01.2016 4
04.01.2016 null
05.01.2016 6
06.01.2016 8
07.01.2016 null
08.01.2016 1
09.01.2016 5
10.01.2016 null
11.01.2016 1
а мне необходимо получить:
01.01.2016 03.01.2016 9
05.01.2016 06.01.2016 7
08.01.2016 09.01.2016 6
11.01.2016 11.01.2016 1
sanekgyrev вне форума Ответить с цитированием
Старый 27.06.2022, 21:30   #7
Valick
Форумчанин
 
Регистрация: 27.04.2022
Сообщений: 493
По умолчанию

sanekgyrev, вы пытаетесь лечить симптомы, а не саму болезнь. Я же спросил как именно данные попадают в эту таблицу. Если это какой то искусственный пример, то вряд ли вы получите конкретный ответ.
Valick вне форума Ответить с цитированием
Старый 28.06.2022, 09:15   #8
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

1. Непустые (рабочие) значения и даты
Код:
select d as first, v
from t
where v is not null
order by d
2. следующая рабочая дата
Код:
select min(d) from t as after where v is not null and after.d > t.d
3. ВСЕ вместе
Код:
select t.d, --рабочая дата
 ( -- следующая рабочая дата
     select min(d) .... where ....>t.d ) as last,
  t.v -- рабочее значение
from t 
where t.v is not null
order by t.d
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 28.06.2022 в 09:18.
evg_m на форуме Ответить с цитированием
Старый 28.06.2022, 18:30   #9
sanekgyrev
 
Регистрация: 08.06.2013
Сообщений: 6
По умолчанию

evg_m, да, по первому у меня такая же была мысль убрать пустые. тут может неправильно разьяснил), у нас есть даты и значения, необходимо найти сумму всех дней, находящихся между NULL. Логика вроде такая, что я должен удалить пустые даты и суммировать значения, пока дата не будет равна "день+1"
вот например есть такие данные:
01.01.2016 2
02.01.2016 3
03.01.2016 4
04.01.2016 null
05.01.2016 6
06.01.2016 8
07.01.2016 null
08.01.2016 1
09.01.2016 5
10.01.2016 null
11.01.2016 1
а мне необходимо получить:
01.01.2016 03.01.2016 9
05.01.2016 06.01.2016 7
08.01.2016 09.01.2016 6
11.01.2016 11.01.2016 1
sanekgyrev вне форума Ответить с цитированием
Старый 28.06.2022, 18:36   #10
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

а почему 05.01.2016 06.01.2016 7, а не 14? 8 + 6 = 14

Последний раз редактировалось macomics; 28.06.2022 в 18:40.
macomics вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
новичок иван 888 Помощь студентам 3 05.10.2010 08:13
Новичок mendess01 Microsoft Office Excel 9 01.10.2010 17:08