2015-07-21 3 views
0

У меня есть следующий набор данных, заказанный определенной колонки:SQL Query вернуть количество строк, пока определенным критериям

ratio 
----- 
1 
1 
1 
0.8333 
1 
1.6667 
3.3333 
1 

И я хочу, чтобы подсчитать строки, в которых соотношение равно 1, но только до тех пор, пока я не дойду до ряда, где отношение не 1. Для вышеуказанного набора данных ожидаемым результатом будет (первые три строки).

Конечно, я мог бы сделать это в коде, но мне просто интересно, есть ли для этого SQL-решение.

+0

разместить код, который производит этот результат – Madhivanan

+0

Что имя столбца для Сортировать по ? –

+0

Это не имеет значения, но в моем случае это было «updated_at» – Webfarmer

ответ

2

Вы говорите, что данные «упорядочены по определенной колонке». Если да, то вы можете просто сделать:

select count(*) 
from table t 
where specificcolumn < (select min(t2.specificcolumn) 
         from table t2 
         where t2.ratio <> 1) 

В зависимости от упорядоченности, <, возможно, потребуется >.

Примечание: предполагается, что конкретный столбец имеет уникальные значения. Если значения не уникальны, вам нужно несколько столбцов для уникального ключа.

+0

Спасибо, что работает как шарм! Я использовал следующий запрос: выберите count (*) из таблицы, где updated_at> (выберите max (updated_at) из таблицы, где коэффициент <> 1) – Webfarmer

1

Если у вас есть еще один столбец первичного ключа в таблице:

SELECT COUNT(`id`) 
FROM `table` 
WHERE `ratio` = 1 
AND `id` < (SELECT `id` FROM `table` WHERE `ratio` != 1 ORDER BY `id` ASC LIMIT 0, 1) 
0

Вы также можете попробовать использовать обновления

declare @cnt int, @flag int 
select @cnt = 0, @flag = null 
update #t set 
    @cnt = @cnt + case when @flag is null then ratio else 0 end, 
    @flag = case when @flag is null and ratio != 1 then 1 else @flag end 
select @cnt 

Я использую T-SQL синтаксиса, но вы можете найти что-то подобное в

Смежные вопросы