Запросы 1С (или SQL)
select t1.a, max(b)
from t1
Left Join t2 On t1.a >= t2.a
group by t1.a
order by t1.a
?
| 01 | 20шт |
| 02 | 20шт |
| 03 | 20шт |
| 04 | 20шт | ?
реальные таблицы намного больше, это я для примера привел
Если таблица2 не сильно разряжена, то мне кажется пойдет. Если сильно, то надо воспользоваться чем нить специфическим для конкретной БД. Поскольку у тебя скорее всего MS SQL, то через аналитику (Oracle) писать не стал.
зачем присоединять максимальное значение справа?
select t3.c1, t2.c2
from
(select t1.c1 as c1, max(t2.c1) as c2
from
t1
join t2 on (t2.c1 <= t1.c1)
group by t1.c1
) t3
join t2 on (t2.c1 = t3.c2)
А база какая? Потому что запрос тяжеловат, лучше пользоваться специальными функциями.
ЗЫ. 1С - версия 8.0, в 8.1 можно еще попробовать со временными таблицами поиграться. Иногда помогает
ВЫБРАТЬ
ТаблицаДат.Дата,
СУММА(ВЫБОР
КОГДА ТаблицаДат.Дата >= ЗапросПоОстаткам.Дата
ТОГДА ЗапросПоОстаткам.Количество
ИНАЧЕ 0
КОНЕЦ) КАК Количество
ИЗ
РегистрСведений.ТаблицаДат КАК ТаблицаДат
ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
ОстаткиНаНачалоПериода.Дата КАК Дата,
ОстаткиНаНачалоПериода.КоличествоОстаток КАК Количество
ИЗ
РегистрНакопления.ОстаткиТовара.Остатки(&ДатаНачала, ) КАК ОстаткиНаНачалоПериода
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ОборотыЗаПериод.Дата,
СУММА(ОборотыЗаПериод.КоличествоОборот)
ИЗ
РегистрНакопления.ОстаткиТовара.Обороты(&ДатаНачала, &ДатаОкончания, , ) КАК ОборотыЗаПериод
СГРУППИРОВАТЬ ПО
ОборотыЗаПериод.Дата) КАК ЗапросПоОстаткам
ПО (ИСТИНА)
СГРУППИРОВАТЬ ПО
ТаблицаДат.Дата
Если совсем лень - можешь воспользоваться Oracle
select t1.a, max(b) from
(select 1 a from dual
union
select 2 a from dual
union
select 3 a from dual
union
select 4 a from dual
union
select 5 a from dual
union
select 6 a from dual
union
select 7 a from dual
union
select 8 a from dual) t1 Left Join
(select 1 a, 10 b from dual
union
select 4 a, 20 b from dual
union
select 7 a, 30 b from dual
) t2 On t1.a >= t2.a
group by t1.a
order by t1.a
большое спасибо!
да, действительно, просто и вкусно =)
а надо просто 30
П.С. задачу решили, всем спасибо
? Так у меня и выводится 30. Ладно, наверно что то я не так понял (при чем тут суммы какие то...).
действительно твой запрос работает
а на нашем любимом 1с
надо писать так как максик написал
в любом случае, спасибо
но если в исходной задаче изменить 20 на 5, то функция мах делает все неправильно
Оставить комментарий
oksana45
подскажите как запросом получить следующую табличку.таблица1 с днями
| 01 |
| 02 |
| 03 |
| 04 |
таблица2 остатков товаров
| 01| 10шт |
| 04| 20шт |
Как получить таблицу3:
| 01 | 10шт |
| 02 | 10шт |
| 03 | 10шт |
| 04 | 20шт |
надо получить именно запросом.