Ваше описание не соответствует желаемому результату.
Это будет соответствовать вашему описанию, т.е. даст вам самую низкую цену, где статус равен 1, и подсчитает количество записей в группе:
select id, date_from, date_to, min(case status when 1 then price end) as price, count(*) as count
from TheTable
group by id, date_from, date_to
Результат:
id | date_from | date_to | price | count
CK1 22-12-2012 29-12-2012 800 2
CK2 24-12-2012 30-12-2012 1800 3
Это даст вам запрошенный результат, то есть отфильтрует записи, для которых статус равен 1, получит самую низкую цену и после фильтрации отфильтрует количество записей в группах:
select id, date_from, date_to, min(price) as price, count(*) as count
from TheTable
where status = 1
group by id, date_from, date_to
Результат:
id | date_from | date_to | price | count
CK1 22-12-2012 29-12-2012 800 2
CK2 24-12-2012 30-12-2012 1800 2
Чтобы получить количество записей, для которых статус равен 0, вам необходимо использовать первый метод, при котором вы не отфильтровываете эти записи. Если статус может быть только 0 или 1, вы можете просто использовать sum(status)
, чтобы получить количество записей, где статус равен 1, и count(case status when 0 then 1 end)
или sum(1 - status)
, чтобы получить количество записей, где статус равен 0.