[access,sql] Можно ли в запросе получить набор дат(1янв, 2янв) и т.д.?
Бредовая по постановке задачка, если хочешь прям набор записей такой - пиши хранимку.
Странный народ, все хочет скулем решитьдавай не будет на личности переходить
Можно и макрос забацать. Но, мне кажется, запрос написать все же проще.
такой - пиши хранимкукого позвать? временную таблицу чтоли?
Если ты создашь рядом табличку со списком всех дат, тогда еще можно что-то решать.
Хранимка - это хранимая процедура.
Но если у тебя Access, то хранимых процедур там нет, и нужно писать макрос.
Если ты создашь рядом табличку со списком всех дат, тогда еще можно что-то решать.Это понятно. Мне казалось, что есть что-нить стандартное (например where date in )
Основная идея в том, чтобы после завершения написания запроса/макроса нужно было делать как можно меньше интелектуальных действий.
Но если у тебя AccessИменно.
Поэтому лучший вариант - писать макрос.
Говорят, что макрос в Access можно написать так, чтобы он работал как некий сохраненный запрос и возвращал набор записей. Думаю, тебе придется копать именно туда.
Только там какая-то некислая структура обращения к таблицам.
Спасибо за совет.
Странный народ, все хочет скулем решитьв оракле это легко решается
Бредовая по постановке задачка, если хочешь прям набор записей такой - пиши хранимку.
в остальных базах видимо токо хранимка
Хотя бывает приятно злобную задачу решить красивым запросом.
Постгрес тоже можно научить вышивать, только зачем?
---
"This user is BSD-compliant."
А как в оракле без хранимки решить?
ботай раздел "group by" и функцию count(..)
Ага, а пропущенные даты как добавлять будешь?
даты, которых нет в исходной таблице (count=0) придется добавлять вручную.
---
...Я работаю антинаучным аферистом...
(+) не поможет?бред напсиал
А как в оракле без хранимки решить?1) берем большую таблицу, т.е. в которой данных больше чем всех дат
данные в этой таблице не нужны, но нужна таблица, например таблица логов
2) выводим натуральный ряд
SELECT rownum FROM bigtable;
3) выводим все даты
например с первого января до 10 февраля
SELECT to_date('01.01.07', 'DD.MM.YY') + rownum - 1 AS dates FROM bigtable
WHERE rownum < (to_date('10.02.07', 'DD.MM.YY') - to_date('01.01.07', 'DD.MM.YY') + 2);
4) далее нам надо скрестить нашу таблицу и вот эту псевдотаблицу всех дат какимнибудь джойном
писать не буду, дальше понятно ...
Ясно. Только выборка по этой таблице может происходить медленно и плохо параллелиться, или большой таблицы вообще может не быть.
может происходить медленнопочему?
мы же подряд все записи берем
а раз ничего не выбираем, то чтений с диска даж не происходит
а то что таблицы не будет, ее можно спец для такого запроса сделать, одна колонка и заполнить ее наллами, потом пригодится
и потом, что значит медленно?
никто такой запрос не будет в релиз пускать, это делается на клиенте или на худой конец в хранимке
а для быстрого получения данных или для тестов - самое оно
Погуглил.
Судя по сравнениям 1 и 2 рулит такой метод, только операвы много жрёт:
select levelPS Думал, Pipelined Function покажет большую производительность.
from dual
connect by level <= 10 ;
не понял про куб
http://www.sqlsnippets.com/en/topic-11823.html
Note 1: In this technique it does not matter what literals you use in the arguments to CUBE. You could use arguments like 1, 1 or 'a','b' and still get the same number of rows. The important part is how many literals you include.
это такая спецификация оракла что там неважно что стоит?
типа мы указываем несуществующий столбец и в нем два значения: какое-то и NULL
вот это вернет 8 единичек
select 1
from dual
group by cube( 1, 2, 3 )
а вот это вернет 7 единичек и один NULL
select 1
from dual
group by cube( 1, 2, 2 )
КАК ТАК?
а этот запрос вернет 6 двоек и два налла
select 2
from dual
group by cube( 1, 2, 2 )
КАК ТАК? откуда наллы то берутся?
может это бага моего оракла, у вас как?
и еще прикол, для первого запроса туад смог построить Explain Plan а для второго и третьего выползло "Access Violation at address ... in module TOAD.exe"
рыба:
select level
from dual
connect by 1 = 1 and level <= NNNN
блин, уже storm озвучил
Оставить комментарий
igorek1
Есть стобец дат:каждая дата встречается несколько раз (в том числе может вообще не встречаться).
Нужно написать запрос, который будет выдавать все даты от минимальной до максимальной в столбце (в том числе пропущенные) и их количество в столбце (для тех дат, которых там не было, нужно выводить 0).
Собственно вопрос: как этот запрос выглядит?