Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Программирование в MSSQL?
|
|||
|---|---|---|---|
|
#18+
Добрый день, коллеги! Пишу скрипт по маржинальности блюд в базу программы общепита. Есть таблица с продажами блюд и есть таблица прайса. Таблица прайса: Код: sql 1. 2. 3. 4. 5. С таблицы продажи блюд по сути мне нужен только id блюда и кол-во дней продаж. Код: sql 1. 2. 3. 4. 5. 6. 7. Задача следующая: Нужно в запросе вывести еще два значения кроме id блюда 1. Кол-во дней доступных для продажи блюда(в периоде может быть несколько прайсов с разными периодам, но как правило периоды не пересекаются) 2. Кол-во дней продажи блюд Как программист я бы использовал for и перебирал даты но тут это явно не прокатит ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2019, 08:46 |
|
||
|
Программирование в MSSQL?
|
|||
|---|---|---|---|
|
#18+
GROUP BY ... + SUM(DATEDIFF(...)) kjtкак правило периоды не пересекаютсяЗначит, пересекаются. "Нельзя быть немножко беременной" (с) Тогда предварительно необходимо объединить пересекающиеся периоды. Поиск по форуму даст ответ (и не один), как это сделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2019, 09:28 |
|
||
|
Программирование в MSSQL?
|
|||
|---|---|---|---|
|
#18+
Akinaнеобходимо объединить пересекающиеся периодыВпрочем, вряд ли потребуются данные за период в сотню лет... тогда разумнее, наверное, наоборот - в CTE развернуть периоды в списки дат, отсеять дубли и использовать COUNT(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2019, 09:29 |
|
||
|
Программирование в MSSQL?
|
|||
|---|---|---|---|
|
#18+
AkinaGROUP BY ... + SUM(DATEDIFF(...)) kjtкак правило периоды не пересекаютсяЗначит, пересекаются. "Нельзя быть немножко беременной" (с) Тогда предварительно необходимо объединить пересекающиеся периоды. Поиск по форуму даст ответ (и не один), как это сделать. Есть нюанс! Количество дней между датами ни так сложно посчитать. Мне нужно не просто кол-во дней в прайсе, а именно те которые попадаю в диапазон выборки из таблицы продаж. Т.е. если период выборки из таблицы продаж с 05.01.19 по 14.01.19 и есть прайс с 03.01.19 по 15.01.19, то мне нужна разница между 05.01 и 14.01 Но может быть и то что прайс может быть с 12.01 по 20.01, то мне нужна разница дней между 12.01 и 14.01 Если бы все решалось так как вы описываете то вряд ли бы я написал на форум... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2019, 09:37 |
|
||
|
Программирование в MSSQL?
|
|||
|---|---|---|---|
|
#18+
kjtЕсли бы все решалось так как вы описываетеИменно так и решается, как я описываю: Akinaв CTE развернуть периоды в списки датОставить даты, которые присутствуют в обоих полученных списках, да посчитать их количество - дело совершенно элементарное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2019, 10:11 |
|
||
|
Программирование в MSSQL?
|
|||
|---|---|---|---|
|
#18+
Для таких случаев не поленитесь и сделайте таблицу-календарь. В ней должны быть все даты, доступные вашей системе. И всякие доп. поля, н-р день недели, номер недели, признак выходного и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2019, 12:18 |
|
||
|
Программирование в MSSQL?
|
|||
|---|---|---|---|
|
#18+
AkinakjtЕсли бы все решалось так как вы описываетеИменно так и решается, как я описываю: Akinaв CTE развернуть периоды в списки датОставить даты, которые присутствуют в обоих полученных списках, да посчитать их количество - дело совершенно элементарное. Сложно такое из воздуха сообразить. Есть какие то экземплы, статьи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2019, 16:00 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39773482&tid=1688301]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
61ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
68ms |
get tp. blocked users: |
2ms |
| others: | 275ms |
| total: | 456ms |

| 0 / 0 |
