Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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



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

Друзья!
Моя задача: получить отчет (назовем его «Значение на дату»).
Есть БД (упрощенно, естественно, до предела):
Поля: / город / дата / значение
--------------------------------------
Записи
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 в 14:21. Причина: орфография
armati lepori вне форума   Ответить с цитированием
Старый 10.11.2016, 14:19   #2
evg_m
Профессионал
 
Регистрация: 20.04.2008
Сообщений: 4,106
Репутация: 1843
По умолчанию

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 в 14:24.
evg_m вне форума   Ответить с цитированием
Старый 10.11.2016, 14:25   #3
armati lepori
Пользователь
 
Аватар для armati lepori
 
Регистрация: 23.09.2016
Сообщений: 31
Репутация: 10
По умолчанию

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

последняя запись(ДАТА) по КАЖДОМУ городу
Код:

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, 14:39   #5
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк, Украина
Сообщений: 15,464
Репутация: 5668
По умолчанию

Так еще можно, для 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 в 14:41.
Аватар на форуме   Ответить с цитированием
Старый 10.11.2016, 14:53   #6
armati lepori
Пользователь
 
Аватар для armati lepori
 
Регистрация: 23.09.2016
Сообщений: 31
Репутация: 10
По умолчанию

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



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите получить дату установки 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




17:53.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

Покупайте на сайте www.skinon.ru уникальные чехлы и наклейки для телефонов.
таргетированный трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru