Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
 Аватар для denis_stell
1 / 1 / 0
Регистрация: 07.02.2010
Сообщений: 129

как добавить данные за отсутствующие дни

03.12.2013, 13:56. Показов 2307. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, форумчане.
Хотел спросить, не понимаю что не правильно делаю:
Итак:
Есть файл в нём таблица, которая время от времени дополняется, в зависимости многих факторов. Таблица представляет из себя данные по некоторому инструменту, в зависимости от периода за конкретную дату,т.е.
date - valuta - instrument - t1 - t7 - t21 - t31 (где t1=1 день, t7 до 7 дней итд)
Всё бы было прекрасно, но а) Файл скачивается со сторонненого ресурса б) В таблице, нет сб,вс
Нужно получить итог, где, например есть 29.10.2013 затем идёт дата 02.12.2013, сб/вс нет, нужно их добавить исходя из того, что данные в сб/вс = пт(29.10.2013)итд, либо если будет пропущена среда(04.12.2013), то данные за среду должны быть равны данным за вторник(03.12.2013).
Делаю так:
SQL
1
2
3
4
SELECT a.*,c.dt FROM RATES_FTP a
    JOIN CALENDAR c ON c.dt BETWEEN '20121231' AND @dtx
CROSS apply (SELECT MAX(date_rate)dt FROM RATES_FTP WHERE instrument=a.instrument AND t_1=a.t_1 AND t_7=a.t_7 AND t_14=a.t_14 AND t_21=a.t_21 AND t_31=a.t_31 AND date_rate<=c.dt) r
JOIN RATES_FTP b ON b.date_rate=r.dt AND b.instrument=a.instrument AND b.t_1=a.t_1 AND b.t_7=a.t_7 AND b.t_14=a.t_14 AND b.t_21=a.t_21 AND b.t_31=a.t_31
где @dtx входящий параметр в хранимой процедуре

Получается хрень и согласен с этим.
Получается следующее:
Таблица RATES_FTP - возьмем промежуток с 04 по 10 ноября 2013, в этой таблице такие значения
2013-11-04;usd;ф.ставка;0.0001;0.005;0.1245;0.00 02
2013-11-05;usd;ф.ставка;0.0001;0.005;0.1245;0.00 02
2013-11-06;usd;ф.ставка;0.0001;0.005;0.1245;0.00 02
2013-11-07;usd;ф.ставка;0.0001;0.005;0.1245;0.00 02
2013-11-08;usd;ф.ставка;0.0001;0.005;0.1245;0.00 02
сб/вс отсутствует
Есть таблица CALENDAR, в которой есть все даты, нужно в итоге получить итоговую таблицу
2013-11-04;usd;ф.ставка;0.0001;0.005;0.1245;0.00 02
2013-11-05;usd;ф.ставка;0.0001;0.005;0.1245;0.00 02
2013-11-06;usd;ф.ставка;0.0001;0.005;0.1245;0.00 02
2013-11-07;usd;ф.ставка;0.0001;0.005;0.1245;0.00 02
2013-11-08;usd;ф.ставка;0.0001;0.005;0.1245;0.00 02
2013-11-09;usd;ф.ставка;0.0001;0.005;0.1245;0.00 02
2013-11-10;usd;ф.ставка;0.0001;0.005;0.1245;0.00 02

Меняться могут все данные, соответственно от даты до ставок, разные валюты,разные инструменты итд.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.12.2013, 13:56
Ответы с готовыми решениями:

Интервал даты. Отсутствующие дни. Запрос.
Здравствуйте. БД: MSSQL Есть табличка допустим kalendar, в ней столбцы: DateT (datetime), znach1, znach2, znach3 Нужно вывести...

Добавить отсутствующие конструкторы
#include &lt;iostream&gt; using namespace std; class base { int i, j; public: base (int n, int m) { i=n; j=m;} void...

Добавить отсутствующие записи или обновить текущие
Добрый день! mobile и ltv_1953 помогли разобраться как добавить (обновить) инфу к выбранным записям в лист(чек)боксе: здесь, но теперь...

1
107 / 107 / 5
Регистрация: 28.12.2012
Сообщений: 207
04.12.2013, 12:57
Используйте RIGHT JOIN при соединении с таблицей CALENDAR - тогда у вас не пропадут данные за "пустые дни".
В инструкции SELECT перепешите обработку a.* - когда придёт значение NULL (в RATES_FTP данных нет, но календарный день был) сделайте ISNULL(a.[date], (выборка_за_прошлый_день_с_данными))
Вот небольшой пример:
T-SQL
1
2
3
4
5
6
7
8
9
10
11
SELECT  ISNULL(a.[date], (SELECT TOP 1 [date] FROM RATES_FTP WHERE [date] < a.[date] AND ORDER BY [date] DESC)
        a.valuta, 
        a.instrument, 
        a.t1, 
        a.t7, 
        a.t31, 
        c.dt 
FROM RATES_FTP a
RIGHT JOIN CALENDAR c ON c.dt BETWEEN '20121231' AND @dtx
CROSS apply (SELECT MAX(date_rate)dt FROM RATES_FTP WHERE instrument=a.instrument AND t_1=a.t_1 AND t_7=a.t_7 AND t_14=a.t_14 AND t_21=a.t_21 AND t_31=a.t_31 AND date_rate<=c.dt) r
JOIN RATES_FTP b ON b.date_rate=r.dt AND b.instrument=a.instrument AND b.t_1=a.t_1 AND b.t_7=a.t_7 AND b.t_14=a.t_14 AND b.t_21=a.t_21 AND b.t_31=a.t_31
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.12.2013, 12:57
Помогаю со студенческими работами здесь

Перенести только отсутствующие данные из первой таблицы во вторую
Есть 2 таблицы: table1 Коля Курит Вася Пьет Петя ломает игршки Женя Хочет к маме ........

Как добавить добавить данные в базу данных посредством LINQ
Как добавить добавить данные в базу данных посредством LINQ to SQL Ошибка: Нарушение &quot;PK_TICKER_MINUTE&quot; ограничения PRIMARY...

Можно ли выяснить и добавить всем картинкам в статьях отсутствующие атрибуты width height в WordPress в пакетном режиме?
Приветствую, уважаемые гуру! Имел неосторожность вписывать картинки непосредственно кодом в статьи через визуальный редактор, не...

К дате добавить дни
Мне необходить к дате в DateN-&gt;Text добавить дни, количество которых находится в Dlit-&gt;Text. Как это сделать? Добавлено через 2...

Как прочитать данные из ячейки, и если она пуста добавить данные
Привет всем. У меня есть вот такой код: &lt;?php $arrqq = array($row-&gt;id); foreach($arrqq as $d =&gt; $s) { $imagetext =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru