выборка по каждому дню

Тема в разделе "SQL", создана пользователем mazacadaxist, 4 фев 2005.

Статус темы:
Закрыта.
  1. mazacadaxist

    mazacadaxist Гость

    Запрос в mssql server.
    В таблице имеется информация о начальной дате процесса и конечной дате процесса. даты для одного процесса могут перекрываться, т.е. процесс№1 начался 15.02.2005, закончился 25.02.2005, этот же процесс - процесс№1 - начался 20.02.2005 и закончился 26.02.2005; процессов может быть много, процесс№2, процесс№3 и т.д.
    вопрос такой как мне посчитать количество запущенный процессов№1
    по дням, каждый день в период с 10.02.2005 по 27.02.2005. и вывести информацию в формате поле№1 - дата; поле№2 - количество процессов.
    Спасибо.
     
  2. Barmutik

    Barmutik Гость

    Если запросом а не хранимой процедурой то без временной таблицы со списком дней никак (хотя я конечно могу и заблуждаться ;) )...

    Ну или если не лень то 17 UNION SELECT по каждому дню ... но для общего случая такой вариант не пойдёт ...
     
  3. techsage

    techsage Гость

    select a2.pid, c_date, sum (case
    when c_date != end_date
    then 1
    else 0
    end) cnt
    from aaaa a1, (select end_date c_date, pid from aaaa
    union
    select start_date, pid from aaaa) a2
    where c_date between start_date and end_date and a1.pid = a2.pid
    group by a2.pid, c_date
    order by 1, 2
     
  4. Barmutik

    Barmutik Гость

    Хороший запрос ... только не реализует поставленную задачу...
     
  5. techsage

    techsage Гость

    c чего бы это не реализует? добавить условие по датам и номеру проекта и все: в нем уже есть все ключевые даты когда что-то менялось. смысла выводить даты из диапазона, в которых _ничего не изменилось_ - не вижу. но если очень хочется то можно даты получить: select :start_date + rownum - 1 from employees e where rownum <= :end_date - :start_date + 1
    правда в mssql вместо rownum надо извратство делать и нужна таблица с количеством строчек > чем диапазон, но принцип тот же
     
  6. Barmutik

    Barmutik Гость

    Ага .. конечно ... смысл то задачи и состоит в том что б вывести все даты из диапазона... иначе бы задача я думаю не вставала бы...

    И вопрос именно и вставал как это сделать в MS SQL ...
     
  7. Guest

    Guest Гость

    Barmutik
    эрзац для rownum в mssql делается, например, так:
    SELECT ( SELECT SUM(1) FROM employee t1 WHERE t1.emp_id <= t2.emp_id ) AS rownum, t2.* FROM employee t2
     
  8. Barmutik

    Barmutik Гость

    Спасибо... плохо только что на список налагается ограничение на количество элементов в таблице из которой он создаётся ...

    Да в принципе создать такой список не было проблемой :)
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей