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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.11.2016, 12:49   #1
armati lepori
Пользователь
 
Аватар для armati lepori
 
Регистрация: 23.09.2016
Сообщений: 34
Вопрос Получить Значение на дату с группировкой

Друзья!
Моя задача: получить отчет (назовем его «Значение на дату»).
Есть БД (упрощенно, естественно, до предела):
Поля: / город / дата / значение
--------------------------------------
Записи
1 / Москва /// 01.02.2016 / 90
2 / Воронеж / 12.04.2016 / 40
3 / Воронеж / 20.06.2016 / 60
4 / Москва /// 07.09.2016 / 75

Нужен запрос в котором указана дата. Ответы должны быть такого вида
А) Для 25.01.2016
/ Пусто
Б) Для 25.06.2016
/// Москва /// 90
/// Воронеж / 60
В) Для 25.10.2016
/// Москва /// 75
/// Воронеж /60

Разумеется БД большая и хочется все сделать за один проход.
Подробности не нужны – важна идея. Подстановку даты в строку и прочие мелочи сделаю сам.
Я не волшебник - я только учусь.

Последний раз редактировалось armati lepori; 10.11.2016 в 13:21. Причина: орфография
armati lepori вне форума Ответить с цитированием
Старый 10.11.2016, 13:19   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

1)получить три ответа за ТРИ запроса.
-- почему в третьем только 75 а не 90 +75
-- почему в первом не 90 + 75 а пусто
Код:
BEETWEN data ??? and ???  надо это
data>=??? and data<???  или так ?
2)получить ВСЕ ответы в ОДНОМ запросе сгруппированными в ТРИ группы (и/или произвольное число групп)???
Код:
order by data

select < выражение ВЫЧИСЛЕНИЯ номера группы по дате >, ............ 
order by 1
3) ....
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 10.11.2016 в 13:24.
evg_m вне форума Ответить с цитированием
Старый 10.11.2016, 13:25   #3
armati lepori
Пользователь
 
Аватар для armati lepori
 
Регистрация: 23.09.2016
Сообщений: 34
По умолчанию

1) Это конечно же 3 запроса (я писал: "в запросе дата")
2) 18 год это была ошибочка моя - все за текущий год
3) Нужна не сумма, а текущее (последнее перед текущей датой значение)
сумма - это уж совсем просто
Я не волшебник - я только учусь.
armati lepori вне форума Ответить с цитированием
Старый 10.11.2016, 13:32   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

последняя запись(ДАТА) по КАЖДОМУ городу
Код:
selelct max(data), город 
from t 
group by город // по каждому городу
where data<??? // за прошедший( нужный) период
inner join последних дат по каждому городу к основной таблице
Код:
select ..............
from t
inner join ( -- только последние 
                select max(data) as gdt, город
                from t
                group by город
                where data<??? 
             ) as lgt on lgt.gdt =t.дата and lgt.город =t.город
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 10.11.2016, 13:39   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Так еще можно, для MS SQL точно сработает
Код:
SELECT T1.Город,
    (SELECT TOP 1 T2.Нечто FROM Таблица T2 WHERE T2.Город=T1.Город AND T2.Дата<='20160125' ORDER BY T2.Дата DESC) AS Нечто
  FROM Таблица T1
  WHERE T1.Дата<='20160125'
  GROUP BY T1.Город
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 10.11.2016 в 13:41.
Аватар вне форума Ответить с цитированием
Старый 10.11.2016, 13:53   #6
armati lepori
Пользователь
 
Аватар для armati lepori
 
Регистрация: 23.09.2016
Сообщений: 34
По умолчанию

Спасибо всем!
Не могу сказать что уже понял все, но "идя" ясна - вложенный запрос.
Я не волшебник - я только учусь.
armati lepori вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите получить дату установки OC AppData Общие вопросы Delphi 14 21.07.2014 09:01
Получить выбранную дату Vladya Помощь студентам 9 09.02.2013 09:34
Получить дату в формате dd.mm.yyyy ArtGrek Общие вопросы Delphi 2 28.04.2011 10:55
Получить дату из строки. KiRx Microsoft Office Excel 3 19.06.2010 19:53
ComboBox. Как получить дату? maksim_serg Microsoft Office Excel 1 06.04.2010 08:28