результаты для каждой группы - PullRequest
2 голосов
/ 16 августа 2011

ОБНОВЛЕНИЕ:

Может быть is_active = true после is_active = false, поэтому мне нужно получить последнее назначенное is_active = true и получить предыдущую запись is_active = false

У меня есть таблица с такой структурой

id (not pk but each group is incremental), name, grp, is_active (boolean)

с такими данными для группы 1

1, name1, group1, true
2, name2, group1, true
3, name3, group1, false
4, name1, group1, false
5, name2, group1, true
6, name3, group1, false <-- this is the next assigned id as the preceding record has an is_active = true
7, (names will differt, group the same and all false)...

... больше данных в той же таблице, но для группы 2

100, name1, group1, true
101, name2, group1, true
102, name3, group1, true
103, name1, group1, true
104, name2, group1, true
105, name3, group1, false <-- this is the next assigned id as the preceding record has an is_active = true
106, (names will differt, group the same and all false)...

У меня есть это, но оно не работает, как я хотел бы, чтобы

SELECT grp, COUNT(*)
FROM tbl_1
WHERE is_active = false
AND id > (
    SELECT id
    FROM tbl_1
    WHERE is_active = true
    ORDER BY id DESC
    LIMIT 1
)
GROUP BY grp

Итак, я хотел бы получить ответ:

group1, 6
group2, 105

но я получаю только

group2, 105

Ответы [ 3 ]

3 голосов
/ 16 августа 2011

Вам действительно нужно найти только первое id, где is_active = false.Нет необходимости применять условие «больше, чем первый активный» для id.

SELECT MIN(id), grp
  FROM tbl_1
  WHERE is_active = false
  GROUP BY grp

ОБНОВЛЕНИЕ:

Ответ на обновленный вопрос:

SELECT min(id), grp
  FROM tbl_1 t
  WHERE is_active = false
  AND id > (SELECT max(id) 
              FROM tbl_1 
              WHERE is_active = true 
                AND grp = t.grp)
  GROUP BY grp;
2 голосов
/ 16 августа 2011
SELECT 
grp,
MIN(Id)
FROM tbl_1
WHERE is_active = false 
GROUP BY grp
2 голосов
/ 16 августа 2011
SELECT grp, MIN(id) FROM tbl_1 WHERE is_active = false GROUP BY grp;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...