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

  • Автор темы mazacadaxist
  • Дата начала
Статус
Закрыто для дальнейших ответов.
M

mazacadaxist

#1
Запрос в 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 - количество процессов.
Спасибо.
 
B

Barmutik

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

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

techsage

#3
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
 
B

Barmutik

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

techsage

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

Barmutik

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

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

Guest

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

Barmutik

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

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